---- 定义 Item 的元数据 就像下面这样,当引用一个 NuGet 包时,可以额外使用 Version 来指定应该使用哪个特定版本的 NuGet 包。...如果你不是用的 Message,而是定义一个其他的属性,使用 @(_WalterlvItem):%(Url) 作为属性的值,那么这个属性也会为每一个项都计算一次值。...关于使用 exe 进行自定义编译的部分可以参考我的另一篇博客: 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 - walterlv 关于写文件的部分可以参考我的另一篇博客: 在 MSBuild...本文会经常更新,请阅读原文: https://blog.walterlv.com/post/how-to-reference-msbuild-item-metadata.html ,以避免陈旧错误知识的误导...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
当咱新建了一个 UNO 的基础库或被引用的项目时,可能采用的是默认的基础库或库项目创建方法,被引用的程序集没有带上 WinUI 的黑科技,导致构建提示 UNOB0002: Project XX contains...失败 如下面代码,这是默认我新建的项目的代码,以下代码已经添加了对 windows10.0.19041 的引用了 MSBuild]::IsOSPlatform('windows')) or '$(EnableWindowsTargeting...Include="Uno.WinUI" /> 然而以上代码依然会在构建时失败 遇到错误 UNOB0002: Project XX contains...This can happen if a project contains only a net7.0 TargetFramework and has a NuGet reference to Uno.WinUI
The official document How to: Reference an MSBuild Project SDK says that if you implement your own Sdk...English: How to Write a Cross-Platform NuGet Tool Package Base on MSBuild Task How to Write a Cross-Platform...I post this method in my another non-English post. ---- References How to: Reference an MSBuild Project...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布
当然,按照官网 How to: Reference an MSBuild Project SDK 的描述,如果自己实现了一套 Sdk,也可以以 NuGet 包的形式发布。 ?...Sdk 文件夹中的 Sdk.props 和 Sdk.targets 是会被默认 Import 的,这一点在官方文档 How to: Reference an MSBuild Project SDK -...而且通常 Sdk 带有扩展性,使得我们可以很方便地对项目的编译过程进行扩展,这一点在我前面提到了两篇制作 NuGet 工具包的文章中都有说明。...> ▲ 这是我另外写的一篇文章:阻止某个 NuGet 包意外升级 ---- 参考资料 How to: Reference an MSBuild Project SDK - Visual Studio -...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
在写 msbuild 的预编译逻辑,如果想要拿到项目安装的 NuGet 库和版本,可以通过获取 PackageReference 的方法获取 获取方法是放在 Target 里面,如下面代码 MSBuild 中正确使用 % 来引用每一个项(Item)中的元数据 项目文件的代码如下 使用命令行试试 更多编译相关请看手把手教你写 Roslyn 修改编译 其实在 msbuild 里,如果小伙伴读过吕水大大的 帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的...试试使用命令行构建 C:\lindexi\DealayhuneaWheluyearfair\ChedarlelaNaykerkeargaini.csproj(22,9): warning : Name=...国际许可协议 进行许可。
使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。...自动迁移 自动迁移的方法我写了一篇新的博客,请阅读 自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference。...唯一的解决办法就是清除项目中的所有 NuGet 缓存,使用 git clean -xdf。 迁移之后的劣势 迁移成新的 csproj 格式之后,新格式中不支持的配置会丢失。...阅读 MSBuild.Sdk.Extras 来了解更多。相比于以上全文的迁移以及带来的劣势,第三方方案并没有发现明显的缺陷,推荐使用!...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
现在新的格式可以使用通配添加文件,例如在文件夹的所有的代码都需要添加,可以使用这个方式 默认是下面代码 不编译一些文件 项目引用 之前的方式需要添加很多代码,如引用 ClassLibrary1 的项目,需要写下面的代码 引用包 之前的 Nuget 引用需要添加 packages.config 和 csproj 才可以使用,现在的 Nuget 4 可以直接在... 新的格式写引用,不需要 packages.config 文件,这样减少了找不到nuget的坑,下面代码就是新的格式,可以看到代码减少1/2 PackageReference...4 需要写引用的库,不需要写他的引用,所以可以减少代码,添加了id和版本就好 PackageReference Include="A" Version="2.2.0" /
当然,工具并不将 csproj 格式进行迁移,而是在不迁移格式的情况下,使用到 PackageReference 方式 NuGet 引用带来的好处。...install.ps1 的存在是因为 packages.config 不支持 PackageReference 中的一些新特性(例如 NuGet 包中新的目录结构,例如包中自带的 msbuild targets...所以,如果 NuGet 包在发布时满足目录要求,那么即便 install.ps1 不用执行也能保证包的行为正常。...当然,在制作和发布 NuGet 包时,尽量使用非特定版本的依赖包,能够极大地避免这种问题带来的影响。...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
不考虑使用 nuget 包发布的情况,只考虑当前项目使用。...PS 如果在修改代码之后,在编译 Task 项目时,发现输出目录的 dll 被占用,直接结束掉 msbuild.exe 进程。推荐使用 PowerToys 的 File Locksmith 工具。...Jgrass.GitHookMsbuildTask.Debugger Task 的 Debug 项目,使用相对路径直接引用,用于开发时的调试。...4.2 Task 使用演示 以下是 Jgrass.GitHookMsbuildTask.Sample 的配置,很简单,就是通过 PackageReference 引入普通的 nuget 包。...本地测试时,需要将 nuget 包所在路径,添加为 nuget 包源。
add Add reference to the project....list List reference in the project....nuget Provides additional NuGet commands....msbuild Runs Microsoft Build Engine (MSBuild)....创建 dotnet core程序 我这边只有SDK + VS Code环境,创建程序直接使用命令行了. dotnet core SDK中已经有很多现成的APP模板,我们直接使用dotnet new命令就可以创建对应的程序
其实在构建的之前,将会执行预编译,将 AssemblyAttribute 的内容输出到 obj\*.AssemblyInfo.cs 文件,小伙伴可以尝试打开这个文件,其实这个文件是由 WriteCodeFragment...只是用这个方法可以不手工创建 AssemblyInfo.cs 文件 如我创建的 WPF 项目,这个项目里面有一个 Foo 类,期望被其他两个项目使用,此时可以添加如下代码 ...包,就可以使用十分清真的写法。...安装 NuGet 的方法是在 csproj 里面的添加下面代码 PackageReference Include="Meziantou.MSBuild.InternalsVisibleTo...> 在安装完成了 Meziantou.MSBuild.InternalsVisibleTo 库之后,可以使用下面代码让其他项目可见 internal 的类 <ItemGroup
右击项目管理 Nuget 引用本地的 Nuget 文件的文件夹,如我这里的 Nuget 文件是在 D:\lindexi\SourceYard\bin\Debug 文件夹下,我就需要添加这样的路径,请看图片...再创建一个项目,这个项目尝试使用 dotnet core 的项目 ? 右击项目管理 Nuget 安装源代码包,然后在主函数添加相同的测试代码 ?...打开 WPF 程序的输出文件夹,可以发现这个文件夹里面只有一个 exe 源代码已经放在 exe 里 调试 在将项目制作 Nuget 包的时候,就有小伙伴吐槽在开发的时候,如果使用 Nuget 安装,很难进行调试...,很难在 dll 里面添加断点,同时在调试的时候修改代码 但是在使用 SourceYard 调试的时候,安装 Nuget 的库和调试本地的引用的代码是完全一样的,就使用上面的控制台调试 例如需要无论用户输出的是什么返回的都是...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
但实际上这个属性在后面版本的 NuGet 开发中就丢掉了。不生效。 官方提供了 IsTool 属性可以使用,但这依然不能阻止 B 安装了 A 包之后,C 包被迫安装 A 包的问题。...在 “工具 -> 选项 -> NuGet 包管理器” 中,我们可以设置 NuGet 源: ? ▲ 添加调试用的 NuGet 源 我们把刚刚 A 项目的输出目录填进去添加一个新的源。...令人遗憾的结果 然而使用命令行编译的时候,就不按照预期工作了;如下图这样,B 项目中出现了对 A 的依赖。 ? 命令行编译时使用这些命令效果都是一样的不管用。...nuget restore msbuild dotnet restore dotnet build 不过,令人难以置信的时,如果此时 Visual Studio 打开了此项目,命令行编译却能符合预期。...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
NuGet Gallery | Jgrass.MSBuild.GitTask 前言 在 .NET 项目自定义 MSBuild Task 中提到,可以使用自定义 MSBuild Task 来实现自定义功能...引入 nuget 包之后,设置好要拦截的大小,内置的 LargeFileInterceptTask 会自动在当前仓库写入一个 git pre-commit hook,实现拦截功能。...因为进行了第三方引用,在打包时,需要将第三方引用加入到 nuget 包中,最终的 csproj 是这样的。..." /> PackageReference Update="@(PackageReference)" PrivateAssets="All" /> 进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
Web.config & App.config .NET Framework 使用Visual Studio创建Web项目(MVC或Web Api)时,会在根目录生成Web.config文件。...Nuget & packages.config Nuget Windows系统中,可通过%AppData%\NuGet\NuGet.config对Nuget进行配置,文件结构如下: Nuget包的操作(添加、删除与版本变更)都会反映到该文件中。...包: [zvdx6amfla.jpg] 我们通过Nuget命令行或者Visual Studio中的图形界面来管理Nuget包,当Nuget包发生变更时,packages.config与.csproj文件内容及...这样很有可能导致项目引用的混乱,所以,不建议直接操作packages.config文件。
Web.config & App.config .NET Framework 使用Visual Studio创建Web项目(MVC或Web Api)时,会在根目录生成Web.config文件。...Nuget & packages.config Nuget Windows系统中,可通过%AppData%\NuGet\NuGet.config对Nuget进行配置,文件结构如下: Nuget包的操作(添加、删除与版本变更)都会反映到该文件中。...包: 我们通过Nuget命令行或者Visual Studio中的图形界面来管理Nuget包,当Nuget包发生变更时,packages.config与.csproj文件内容及packages文件夹都会发生相应的变化...这样很有可能导致项目引用的混乱,所以,不建议直接操作packages.config文件。
中的代码文件 - 吕毅 为 Visual Studio 使用通配符批量添加项目文件 - 吕毅 Roslyn 使用 Directory.Build.props 管理多个项目配置 - 林德熙 Roslyn...使用 Directory.Build.props 文件定义编译 - 林德熙 使用 MSBuild 响应文件 (rsp) 来指定 dotnet build 命令行编译时的大量参数 - 吕毅 NuGet...升级为 PackageReference - 吕毅 如何最快速地将旧的 NuGet 包 (2.x, packages.config) 升级成新的 NuGet 包 (4.x, PackageReference...UWP 程序 - 吕毅 dotnet core 通过修改文件头的方式隐藏控制台窗口 - 林德熙 使用 GitVersion 在编译或持续构建时自动使用语义版本号(Semantic Versioning...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
-- 这个就是创建项目时使用的名称。 --> Walterlv.NuGetTool 添加配置: 时,发现 dll 被占用的情况,这时,打开任务管理器结束掉 msbuild.exe 进行即可。...当写在外面时,要特别留意可能某些属性没有初始化完全,你应该只使用那些肯定能确认存在的属性或文件。...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
本文介绍使用 ILMerge 工具和其 NuGet 工具包来合并程序集和其依赖。 以 NuGet 包的形式使用 ILMerge ILMerge 提供了可供你项目使用的 NuGet 包。.../ilmerge) 或者直接在你的项目的 csproj 文件中添加 PackageReference: 1 2 3 PackageReference Include="...(注意到项目文件中我有额外引用一个其他的 NuGet 包 Ben.Demystifier,这是为了演示将依赖进行合并而添加的 NuGet 包,具体是什么都没有关系,我们只是在演示依赖的合并。)...如果你希望在你的项目当中进行尝试,可以把所有 /log 参数之后的那些程序集名称改为你自己的名称。 那么在编译的时候使用命令 msbuild /t:ILMerge 就可以完成程序集的合并了。...以封装的 NuGet 包来使用 ILRepack 安装 NuGet 包: 之后,你就能直接使用 ILRepack 这个编译任务了,而不是在 MSBuild 中使用 Exec 来间接执行 ILRepack
今天在少珺小伙伴的协助下,使用了 gitlab 的 runner 给全组的项目做自动的构建。...为什么需要使用 Gitlab 的 Runner 做自动构建,原因是之前是用的是 Jenkins 而新建一个底层库项目想要接入自动构建等,需要来回在 Gitlab 和 Jenkins 上配置,大概步骤差不多有...也就是从原本平均 20 分钟搭建一个项目,每天不断修配置,到现在不到1分钟搞定 当然上面说的 1 分钟搞定不包含我首次弄虚拟机到配置打包等,我踩了以下的坑 服务器使用无线网,此时无线网不稳定,让 gitlab...上面的配置将会在每次push触发,然后自动执行编译,只有在 master 分支被 push 时触发发布 请注意在本地将上面命令运行一下,确定命令可以运行 为什么需要在 NuGet 使用 -ApiKey...点击安全设置下的本地策略,展开本地策略点击用户权限分配,找到右侧作为服务登录 双击添加用户或组将刚才 --user 使用的用户添加 这个用户就作为服务登录,因为我是在虚拟机使用,所以我可以将当前用户作为服务登录