为什么 NuGet 包会破坏 VS2019 构建工具?

Why does NuGet pack break with VS2019 build tools?

我们有许多 .NET Framework 项目在 post-build 步骤中带有 "nuget pack MyProject.csproj" 命令。到目前为止,我们一直在使用 VS2010(:O 我知道),它一直很高兴地吐出 nupkg 文件。

我们最近将构建工具更新到 2019 版本(运行 调用 msbuild 之前 varsall.bat 的新版本),现在 "nuget pack" 命令失败:

Error NU5012: Unable to find 'MyProject.dll'. Make sure the project has been built.

我试过的:

我是否遗漏了一些简单的东西,它可以在不进行大量修改的情况下工作?

Error NU5012: Unable to find 'MyProject.dll'. Make sure the project has been built.

此消息表示 nuget.exe 无法找到输出程序集。所以一定要确保程序集创建成功。

还有一点你需要注意,通常我们使用像nuget pack foo.csproj -Properties Configuration=Release这样的命令来打包在发布模式下构建的程序集。如果你在 post-build-event 中使用类似 nuget pack xx.csproj 的命令,无论你使用哪种配置 msbuild 来构建项目, nuget 总是会尝试在ProjectDir/bin/debug.

因此,当您将项目部署到没有 bin 和 obj 文件夹的远程服务器时,如果您尝试使用像 msbuild xx.csproj /p:Configuration=Release 这样的命令,构建处于发布模式,而 nuget.exe 将搜索 bin\debug 而不是预期的 bin\release。你应该检查一下你是否处于同样的情况。

Why does NuGet pack break with VS2019 build tools?

此问题与构建工具包无关。由于您收到的错误消息来自 nuget。 Msbuild 只是帮助调用 nuget.exe,问题的原因是 nuget.exe can't find the needed assembly by one specific path。请检查错误信息中的路径是否正确,然后检查程序集是否在该路径中。

在 TFS 升级到 Azure Devops 期间,我也 运行 遇到了同样的问题。新的 Nuget 任务没有 -Build 的开关。 Pack 的 Nuget 任务屏幕中的字段也不允许您添加此开关,这就是为什么它抱怨找不到 dll 或构建的输出。我修改了代理任务文件夹中的 nugetpack.js 文件来测试理论,现在包选项构建成功。

这是我添加到 js 文件中的行(靠近页面底部): nugetTool.arg("-构建");

最好是将此选项表示为复选框,以涵盖是否存在不使用 -Build 开关调用 Nuget 包的用例