为什么 NuGet 包会中断 VS2019 构建工具?



我们有许多.NET Framework项目,在构建后步骤中使用了"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.

我尝试过:

  • 在打包之前添加"nuget 规范"步骤
  • 将 nuget CLI 可执行文件升级到最新版本
  • 从 packages.config 更新到 PackageReferences
    • 这允许您使用 MSBuild -t:pack。 但是,有两个问题:
    • 在我的机器上的构建后步骤中运行它时,它会启动数十个cmd和MSBuild进程并固定我的CPU。
    • 我们的
    • 开发人员目前停留在VS2017上,但2017年的构建工具不再可用于我们的构建服务器(所以我们使用2019(。 2017年和2019年的安装将MSBuild放在不同的位置。 我们可以为所有机器设置路径变量,但这似乎很脆弱。
  • 我正在尝试将其中一个项目升级到新的 csproj 格式,但它相当复杂。 升级我们所有的项目将是一项自己的努力,我仍在探索其后果。

我缺少一些简单的东西可以让它无需大量修改即可工作吗?

错误 NU5012:找不到"我的项目.dll"。确保项目 已经建成。

此消息指示 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 将搜索bindebug而不是预期的binrelease。您应该检查您是否处于相同的情况。

为什么 NuGet 包会中断 VS2019 构建工具?

此问题与生成工具包无关。由于您收到的错误消息来自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 pack而无需-build开关

最新更新