2

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

<BuildPackage>true</BuildPackage> 

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

我相信他们的结论是错误的,但我承认没有文件是很奇怪的。我知道该功能的唯一原因是我阅读了 NuGet.targets 文件。在事后搜索文档时,我在互联网上发现的唯一内容是一个简单的 SO 帖子,它只是提到了BuildPackage 属性

我们能做得比这更好吗?哪里有提到这个属性的文档,以及如何以及何时使用它?听到“这种用法是被禁止的,因为它是无证的”,真是令人遗憾。

4

2 回答 2

3

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

在 NuGet 2.7 之前,使用和推广了 MSBuild 集成包还原方法。虽然这种方法仍然可用,但 NuGet 团队建议改用 Automatic Package Restore 和 Command-Line Package Restore。

相应地,在 3.0 版本的 NuGet Visual Studio 扩展中,“启用 NuGet 包还原”上下文菜单项将被移除

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

<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

于 2015-02-05T16:38:01.000 回答
1

我知道这篇文章有点老了,但我也在利用这个属性,很想知道它的命运。我发现使“功能”“正确”工作的最简单方法是在我的解决方案上使用“启用 NuGet 包还原”,然后将该属性添加到我想要输出包的项目中。这样,我不需要将 Nuget.targets 导入和 $(SolutionDir) 属性定义添加到解决方案中的每个项目。这是一个很棒的“功能”,因为只要我的 AssemblyInfo 元数据正确,我就不需要维护 .nuspec 文件。到目前为止效果很好......直到我发现从 Nuget 2.7 开始,“启用 NuGet 包还原”方法被认为已过时,不应使用。所以......很高兴知道这个“功能”是否

于 2014-06-09T18:01:28.030 回答