首页
学习
活动
专区
圈层
工具
发布

如何在 MSBuild 中正确使用 % 来引用每一个项(Item)中的元数据

---- 定义 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 国际许可协议 进行许可。

1.9K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程

    当然,按照官网 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 国际许可协议 进行许可。

    1.6K30

    将 WPF、UWP 以及其他各种类型的旧 csproj 迁移成基于 Microsoft.NET.Sdk 的新 csproj

    使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。...自动迁移 自动迁移的方法我写了一篇新的博客,请阅读 自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference。...唯一的解决办法就是清除项目中的所有 NuGet 缓存,使用 git clean -xdf。 迁移之后的劣势 迁移成新的 csproj 格式之后,新格式中不支持的配置会丢失。...阅读 MSBuild.Sdk.Extras 来了解更多。相比于以上全文的迁移以及带来的劣势,第三方方案并没有发现明显的缺陷,推荐使用!...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

    2.1K20

    从以前的项目格式迁移到 VS2017 新项目格式 必须删除必须修改添加文件项目引用引用包删除多余文件输入注释多个框架使用条件判断迁移 WPF 项目

    现在新的格式可以使用通配添加文件,例如在文件夹的所有的代码都需要添加,可以使用这个方式 默认是下面代码 不编译一些文件 项目引用 之前的方式需要添加很多代码,如引用 ClassLibrary1 的项目,需要写下面的代码 引用包 之前的 Nuget 引用需要添加 packages.config 和 csproj 才可以使用,现在的 Nuget 4 可以直接在... 新的格式写引用,不需要 packages.config 文件,这样减少了找不到nuget的坑,下面代码就是新的格式,可以看到代码减少1/2 PackageReference...4 需要写引用的库,不需要写他的引用,所以可以减少代码,添加了id和版本就好 PackageReference Include="A" Version="2.2.0" /

    4.6K20

    自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference

    当然,工具并不将 csproj 格式进行迁移,而是在不迁移格式的情况下,使用到 PackageReference 方式 NuGet 引用带来的好处。...install.ps1 的存在是因为 packages.config 不支持 PackageReference 中的一些新特性(例如 NuGet 包中新的目录结构,例如包中自带的 msbuild targets...所以,如果 NuGet 包在发布时满足目录要求,那么即便 install.ps1 不用执行也能保证包的行为正常。...当然,在制作和发布 NuGet 包时,尽量使用非特定版本的依赖包,能够极大地避免这种问题带来的影响。...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

    2.2K20

    dotnet 新 SDK Style 项目格式如何使用 InternalsVisibleToAttribute 功能

    其实在构建的之前,将会执行预编译,将 AssemblyAttribute 的内容输出到 obj\*.AssemblyInfo.cs 文件,小伙伴可以尝试打开这个文件,其实这个文件是由 WriteCodeFragment...只是用这个方法可以不手工创建 AssemblyInfo.cs 文件 如我创建的 WPF 项目,这个项目里面有一个 Foo 类,期望被其他两个项目使用,此时可以添加如下代码 ...包,就可以使用十分清真的写法。...安装 NuGet 的方法是在 csproj 里面的添加下面代码 PackageReference Include="Meziantou.MSBuild.InternalsVisibleTo...> 在安装完成了 Meziantou.MSBuild.InternalsVisibleTo 库之后,可以使用下面代码让其他项目可见 internal 的类 <ItemGroup

    1K20

    SourceYard 制作源代码包 控制台项目WPF 程序调试

    右击项目管理 Nuget 引用本地的 Nuget 文件的文件夹,如我这里的 Nuget 文件是在 D:\lindexi\SourceYard\bin\Debug 文件夹下,我就需要添加这样的路径,请看图片...再创建一个项目,这个项目尝试使用 dotnet core 的项目 ? 右击项目管理 Nuget 安装源代码包,然后在主函数添加相同的测试代码 ?...打开 WPF 程序的输出文件夹,可以发现这个文件夹里面只有一个 exe 源代码已经放在 exe 里 调试 在将项目制作 Nuget 包的时候,就有小伙伴吐槽在开发的时候,如果使用 Nuget 安装,很难进行调试...,很难在 dll 里面添加断点,同时在调试的时候修改代码 但是在使用 SourceYard 调试的时候,安装 Nuget 的库和调试本地的引用的代码是完全一样的,就使用上面的控制台调试 例如需要无论用户输出的是什么返回的都是...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

    1.4K20

    帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的 NuGet 包

    但实际上这个属性在后面版本的 NuGet 开发中就丢掉了。不生效。 官方提供了 IsTool 属性可以使用,但这依然不能阻止 B 安装了 A 包之后,C 包被迫安装 A 包的问题。...在 “工具 -> 选项 -> NuGet 包管理器” 中,我们可以设置 NuGet 源: ? ▲ 添加调试用的 NuGet 源 我们把刚刚 A 项目的输出目录填进去添加一个新的源。...令人遗憾的结果 然而使用命令行编译的时候,就不按照预期工作了;如下图这样,B 项目中出现了对 A 的依赖。 ? 命令行编译时使用这些命令效果都是一样的不管用。...nuget restore msbuild dotnet restore dotnet build 不过,令人难以置信的时,如果此时 Visual Studio 打开了此项目,命令行编译却能符合预期。...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

    1.4K50

    从零开始学习 dotnet 编译过程和 Roslyn 源码分析

    中的代码文件 - 吕毅 为 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 国际许可协议 进行许可。

    1.1K40

    .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖

    本文介绍使用 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

    4.7K30

    dotnet 配置 Gitlab 的 Runner 做 CI 自动构建

    今天在少珺小伙伴的协助下,使用了 gitlab 的 runner 给全组的项目做自动的构建。...为什么需要使用 Gitlab 的 Runner 做自动构建,原因是之前是用的是 Jenkins 而新建一个底层库项目想要接入自动构建等,需要来回在 Gitlab 和 Jenkins 上配置,大概步骤差不多有...也就是从原本平均 20 分钟搭建一个项目,每天不断修配置,到现在不到1分钟搞定 当然上面说的 1 分钟搞定不包含我首次弄虚拟机到配置打包等,我踩了以下的坑 服务器使用无线网,此时无线网不稳定,让 gitlab...上面的配置将会在每次push触发,然后自动执行编译,只有在 master 分支被 push 时触发发布 请注意在本地将上面命令运行一下,确定命令可以运行 为什么需要在 NuGet 使用 -ApiKey...点击安全设置下的本地策略,展开本地策略点击用户权限分配,找到右侧作为服务登录 双击添加用户或组将刚才 --user 使用的用户添加 这个用户就作为服务登录,因为我是在虚拟机使用,所以我可以将当前用户作为服务登录

    2.8K20
    领券