记录“BuildPackage”属性的位置在哪里?

时间:2013-09-26 17:53:09

标签: visual-studio msbuild nuget

我的同事很困惑,从Visual Studio我可以构建一个解决方案,并自动从项目中创建NuGet包。当然这是因为我将以下内容添加到我的csproj文件中的第一个PropertyGroup:

<BuildPackage>true</BuildPackage> 

我的同事不相信这种能力,也不想采用它,因为他们没有在任何地方看到它。他们担心这是不受支持的不受支持的定制。

我认为他们的结论是错误的,但我确实承认没有文件是奇怪的。我知道这个功能的唯一原因是因为我读了NuGet.targets文件。事后搜索文档,我发现互联网上唯一的东西就是单个SO帖子,只提到BuildPackage property

我们能做得比这更好吗?哪些文档提到了这个属性,以及如何以及何时使用它?听到“禁止使用这种用法是因为它没有记录,这是一种耻辱。”

2 个答案:

答案 0 :(得分:3)

通过将BuildPackage属性添加到项目文件来创建包记录/透明(见下文),但NuGet团队no longer recommends使用添加支持的机制对于该属性,“MSBuild-Integrated Package Restore”:

  

在NuGet 2.7之前,采用了MSBuild集成包恢复方法   使用和推广。虽然这种方法仍然可用,但NuGet   团队建议使用自动包恢复和命令行   改为包恢复。

相应地,在3.0版本的NuGet Visual Studio扩展中,“启用NuGet包恢复”上下文菜单项will be removed

正如您所发现的,BuildPackage.nuget\NuGet.targets MSBuild文件中定义的目标,如果您执行“启用NuGet包还原”,Visual Studio会将其添加到您的解决方案中。

<Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites">
    <Exec Command="$(BuildCommand)"
          Condition=" '$(OS)' != 'Windows_NT' " />

    <Exec Command="$(BuildCommand)"
          LogStandardErrorAsError="true"
          Condition=" '$(OS)' == 'Windows_NT' " />
</Target>

Exec任务调用cmd.exe; $(BuildCommand)是在同一文件中定义的属性:

<BuildCommand>
$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols
</BuildCommand>

$(NuGetCommand)将在您的解决方案目录中评估为.nuget\NuGet.exe

因此,将来虽然不支持自动添加这些msbuild节点,但您可以自己将它们添加到项目中,或者使用其他方法执行完全相同(完全支持)的命令行nuget pack。< / p>

答案 1 :(得分:1)

我知道这篇文章有点陈旧,但我也在利用这个属性,很想知道它的命运。制作&#34;功能的最简单方法&#34;工作&#34;正确&#34;我发现是使用&#34;启用NuGet包恢复&#34;在我的解决方案上,然后将属性添加到我想要输出包的项目。这样我就不需要将Nuget.targets导入和$(SolutionDir)属性定义添加到我的解决方案中的每个项目中。这是一个伟大的功能&#34;因为只要我的AssemblyInfo元数据正确,我就不需要维护.nuspec文件。它到目前为止工作得很好......直到我发现Nuget 2.7,&#34;启用NuGet包恢复&#34;方法被认为是过时的,不应该使用。所以...知道这个&#34;功能&#34;是否会很好。应该被使用。