我需要你的帮助。
我正在开发一个 msbuild 任务,该任务在 msbuild 上执行某些操作。
我希望我的用户能够下载并安装 nuget 包,安装包后,生成任务将成为生成过程的一部分。
我知道如何发布 nuget 包,并且知道如何将自定义目标文件与 nuget 一起包含,我不知道的是如何在安装 nuget 时将导入语句添加到 csproj:
有没有办法这样做,还是我要求太多了?
谢谢! 吉拉德
文档不是最容易找到的地方,但这里有一个指向在包中包含 MSBuild 道具/目标文件的文档的链接。
基本上,您将文件放在位置build<tfm><package_id>.props
的包中。例如buildnetstandard2.0MyPackage.props
.如果您希望构建目标包含在所有 TFM 中,则可以使用build<package_id>.props
,但是如果您的包还包含其他资产(如lib/
或contentFiles/
(,则"无 TFM"构建文件将导致"资产目标回退"失败,因此,如果您的包只有net472
个库和build
文件,则面向netcoreapp3.0
的项目将仅获取build
资产, 没有net472
资产。如果build
文件位于 TFM 文件夹中,则 NuGet 的资产目标回退将同时选择lib
和build
资产。因此,我强烈建议大家始终使用TFM文件夹。
文档需要改进,但解释的表格列出了build
、buildTransitive
和buildMultiTargeting
。使用packages.config
的项目仅使用build
下的构建资源。使用PackageReference
的项目仅在项目直接引用包时使用build
和buildMultiTargeting
资源。buildTransitive
下的资产在传递(而不是直接(拉入包时被选中。build
和buildMultiTargeting
之间的区别很复杂。如果你理解多目标SDK风格项目中"内部构建"和"外部构建"的概念,这就是区别(build
是内部构建(,否则只能使用build
。
我应该更新文档以获得此信息。