我的同事很困惑,从Visual Studio我可以构建一个解决方案,并自动从项目中创建NuGet包。当然这是因为我将以下内容添加到我的csproj文件中的第一个PropertyGroup:
<BuildPackage>true</BuildPackage>
我的同事不相信这种能力,也不想采用它,因为他们没有在任何地方看到它。他们担心这是不受支持的不受支持的定制。
我认为他们的结论是错误的,但我确实承认没有文件是奇怪的。我知道这个功能的唯一原因是因为我读了NuGet.targets文件。事后搜索文档,我发现互联网上唯一的东西就是单个SO帖子,只提到BuildPackage property。
我们能做得比这更好吗?哪些文档提到了这个属性,以及如何以及何时使用它?听到“禁止使用这种用法是因为它没有记录,这是一种耻辱。”
答案 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;是否会很好。应该被使用。