我们在解决方案和项目中使用标准的NuGet.targets文件来在构建时进行包更新和包创建。
现在的问题是:当我们构建这样的解决方案时:
msbuild MySolution.sln /P:Configuration=Release;BuildPackage=true;PackageOutputDir="..\CreatedPackages"
然后NuGet.targets文件在我们的解决方案中为所有项目构建包。 所以我们实际上也为我们的单元和集成测试项目提供了Nuget包,这是我们不想要的。
在这些项目中无条件地设置属性<BuildPackage>false</BuildPackage>
没有帮助,因为该属性已由命令行设置,之后无法更改。我不想更改nuget.targets
文件。
所以问题是:如何防止解决方案中特定项目的包创建,而其他项目应该构建他们的包?
答案 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>