【问题标题】:How to create nuget package with msbuild without rebuilding project?如何在不重建项目的情况下使用 msbuild 创建 nuget 包?
【发布时间】:2018-04-09 00:10:39
【问题描述】:

我想设置一个包含构建、测试和部署阶段的 CI/CD 管道。 我可以在构建阶段构建我的项目

msbuild src\MyProject.csproj /t:Restore 
msbuild src\MyProject.csproj /p:Configuration=Release /p:OutputPath=../BuildOutput

接下来我将针对已经构建的..\BuildOutput\MyProject.dll 构建和运行测试。

msbuild tests\MyProject.Tests.csproj /t:Restore
msbuild tests\MyProject.Tests.csproj /p:Configuration=Release /p:OutputPath=../BuildOutput /p:BuildProjectReferences=false
vstest.console BuildOutput\MyProject.Tests.dll

到目前为止,它似乎有效。

现在我想生成 nuget 包。 我可以打电话:

msbuild src\MyProject.csproj /t:Pack /p:Configuration=Release /p:OutputPath=../BuildOutput /p:VersionPrefix=1.2.3

这将在BuildOutput 文件夹中创建MyProject.1.2.3.nupkg。 但是它会重新构建该项目。

我正在寻找类似于 dotnet cli 的内容。

dotnet pack --no-build

但我不能使用dotnet,因为我的项目有一个 COM 引用。

我也查看了 Nuget.exe,但是当我调用 nuget pack 时它似乎会抛出错误

Unable to cast object of type 'System.String' to type NuGet.Frameworks.NuGet.Frameworks1051960.NuGetFramework'.

msbuild 是否有可以跳过构建的属性?

【问题讨论】:

标签: .net msbuild nuget


【解决方案1】:

这取决于您的工作流程是否可以接受,但您可以在构建项目时使用<PropertyGroup><PropertyGroup> 文件中的<GeneratePackageOnBuild> 属性来获取包。如果您的测试没有通过,您可以丢弃 .nupkg 文件,但至少不需要额外的重建来获取 NuGet 包。

the article Easily supporting multiple target frameworks (TFMs) with VS2017 and Nuget1 的末尾有一个更完整的示例说明如何使用此设置,但一个示例性非常简单的 sn-p 如下所示:

<PropertyGroup>
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
</PropertyGroup>

1:虽然原始链接没有报告 404,但它在 2021 年 10 月显示为空白。但是,可以在 on another URL 找到同一篇文章。

【讨论】:

  • 我也想到了这一点。所以在构建阶段我构建了我的项目并创建了那个包。如果是时候进行部署,那么我只需发送在构建阶段生成的包。虽然总是在构建阶段创建包感觉有点多余,但我仍然更喜欢可用的管道而不是根本没有:)。
  • 另外,如果您想在构建时专门定义它(例如,作为 CI 配置的一部分),而不是将其硬编码到您的项目文件中,您可以改用 @987654328 @ 转变。这与仅使用 /t:pack 不同,因为它将确保仍然构建任何不用于打包的项目,如果有单独的 /t:build 任务就会发生这种情况。
  • @O.R. Mapper 你能告诉我GeneratePackageOnBuild是在哪个props或targets文件中定义的吗?
  • “这篇文章”的链接坏了
  • @pvoosten:感谢您指出这一点 - 我想我已经找到了该文章的第二个来源并将其添加到答案中。
猜你喜欢
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 2016-02-06
  • 2021-11-23
  • 2015-01-21
  • 2014-07-25
  • 2012-03-17
  • 1970-01-01
相关资源
最近更新 更多