为解决方案中的单个项目禁用NuGet BuildPackage

时间:2014-09-26 14:16:29

标签: msbuild nuget

我们在解决方案和项目中使用标准的NuGet.targets文件来在构建时进行包更新和包创建。

现在的问题是:当我们构建这样的解决方案时:

msbuild MySolution.sln /P:Configuration=Release;BuildPackage=true;PackageOutputDir="..\CreatedPackages"

然后NuGet.targets文件在我们的解决方案中为所有项目构建包。 所以我们实际上也为我们的单元和集成测试项目提供了Nuget包,这是我们不想要的。

在这些项目中无条件地设置属性<BuildPackage>false</BuildPackage>没有帮助,因为该属性已由命令行设置,之后无法更改。我不想更改nuget.targets文件。

所以问题是:如何防止解决方案中特定项目的包创建,而其他项目应该构建他们的包?

3 个答案:

答案 0 :(得分:2)

似乎无法在不修改Nuget.targets文件的情况下解决此问题。

我们所做的是介绍一个新属性&#39; SkipBuildPackage&#39;,默认情况下(条件,如果尚未设置为其他值)在false中设置为nuget.targets文件。

然后BuildPackage目标获得一个额外的条件,它会评估此属性,并且在SkipBuildPackage设置为true时不会执行目标。

我们在项目的项目文件中将此属性设置为true,我们不希望在默认情况下构建软件包。

但是,通过在命令行上指定/P:SkipBuildPackage=false,仍然可以为这些项目构建包。这将覆盖项目文件中的属性和nuget.targets文件中的默认值,并阻止跳过所有包。

答案 1 :(得分:0)

问题是nuget.targets文件连接到解决方案中的所有项目配置文件(.csproj),而BuildPackage目标也位于nuget.targets文件中。 解决它的两个想法:

  • 对于不需要nuget.targets的项目,意味着他们不需要在构建过程中恢复包,您可以从.csproj中删除导入到nuget.target文件配置文件。

  • 将BuildPackage目标复制到项目配置文件(.csproj),仅复制到要打包的项目,并将其从nuget.targets中删除。这将使BuilPackage目标与相关项目隔离开来。

答案 2 :(得分:0)

通过在<IsPackable>文件中为false提供.csproj属性值,您可以忽略该项目而不将其打包为nuget包

<IsPackable>true</IsPackable>-创建程序包

<IsPackable>false</IsPackable>-不要创建程序包

下面是您的.csproj文件的示例副本

<PropertyGroup>
   <OutputType>Exe</OutputType>
   <TargetFramework>netcoreapp3.1</TargetFramework>
   <PublishRepositoryUrl>false</PublishRepositoryUrl>
   <IsPackable>false</IsPackable>
</PropertyGroup>