2014-09-26 121 views
2

我们在我们的解决方案和项目中使用标准NuGet.targets文件来在构建上执行包更新和包创建。为解决方案中的单个项目禁用NuGet BuildPackage

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

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

那么NuGet.targets文件一起获取并建立包我们的解决方案的所有项目。 因此,我们实际上最终得到了我们的单元和集成测试项目的Nuget包,这也是我们不想要的。

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

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

回答

2

看来这是不可能解决这个问题没有修改Nuget.targets文件。

我们所做的是引入一个新属性'SkipBuildPackage',默认情况下(有条件的,如果尚未设置为其他值)在nuget.targets文件中设置为false

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

我们在项目的项目文件中将此属性设置为true,我们不想在默认情况下生成软件包。

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

0

问题是,nuget.targets文件连接到解决方案中的所有项目配置文件(.csproj),并且BuildPackage目标也位于nuget.targets文件中。 两个思路来解决这个问题:

  • 对于不需要nuget.targets,这意味着他们不需要在构建过程来恢复包项目,可以去掉进口nuget.target文件从他们的.csproj配置文件。

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

+0

删除nuget targets文件确实不是一个选项,因为我们仍然依赖于旧的软件包恢复功能。编辑nuget.targets文件是我们不喜欢的,但它似乎是目前唯一的选择。 – 2014-10-08 16:37:47