Msbuild 为解决方案中的单个项目禁用NuGet BuildPackage
我们在解决方案和项目中使用标准的NuGet.targets文件在构建时进行包更新和包创建 现在的问题是:当我们构建这样的解决方案时:Msbuild 为解决方案中的单个项目禁用NuGet BuildPackage,msbuild,nuget,Msbuild,Nuget,我们在解决方案和项目中使用标准的NuGet.targets文件在构建时进行包更新和包创建 现在的问题是:当我们构建这样的解决方案时: msbuild MySolution.sln /P:Configuration=Release;BuildPackage=true;PackageOutputDir="..\CreatedPackages" 然后,NuGet.targets文件开始运行,并为解决方案中的所有项目构建包。 因此,我们实际上也为单元测试和集成测试项目提供了Nuget包,这是我们不想要
msbuild MySolution.sln /P:Configuration=Release;BuildPackage=true;PackageOutputDir="..\CreatedPackages"
然后,NuGet.targets文件开始运行,并为解决方案中的所有项目构建包。
因此,我们实际上也为单元测试和集成测试项目提供了Nuget包,这是我们不想要的
在这些项目中无条件地设置属性false
,没有任何帮助,因为该属性已由命令行设置,以后无法更改。我不想更改nuget.targets
文件
因此,问题是:如何防止在解决方案中为特定项目创建包,而其他项目应构建其包?问题是,nuget.targets文件连接到解决方案中的所有项目配置文件(.csproj),而BuildPackage目标也在nuget.targets文件中。 解决这个问题有两个办法:
- 对于不需要nuget.targets的项目,也就是说它们不需要在构建过程中恢复包,您可以从它们的.csproj配置文件中删除对nuget.target文件的导入
- 将BuildPackage目标复制到项目配置文件(.csproj),仅复制到要打包的项目,然后将其从nuget.targets中删除。这将隔离BuilPackage目标,仅限于相关项目
- 如果不修改
Nuget.targets
文件,似乎无法解决此问题
我们所做的是引入了一个新属性“SkipBuildPackage”,它在nuget.targets
文件中默认设置为false
然后,当SkipBuildPackage
设置为true
时,BuildPackage
目标会获得一个附加条件,该条件会评估此属性,并且不会执行目标
在默认情况下不希望构建包的项目的项目文件中,我们将此属性设置为true
但是,通过在命令行上指定/p:SkipBuildPackage=false
,仍然可以为这些项目构建包。这将覆盖项目文件中的属性和nuget.targets
文件中的默认属性,并防止跳过所有包 通过在.csproj
文件中为false
提供属性值,您可以忽略该项目,而不将其打包为nuget包
true
-创建包
false
-不创建包
以下是.csproj
文件的示例副本
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<PublishRepositoryUrl>false</PublishRepositoryUrl>
<IsPackable>false</IsPackable>
</PropertyGroup>
Exe
netcoreapp3.1
假的
假的
删除nuget targets文件确实不是一个选项,因为我们(仍然)依赖旧的包还原功能。编辑nuget.targets文件是我们不喜欢的,但它似乎是目前唯一的选择。