0

我们有许多 .NET Framework 项目,在构建后步骤中带有“nuget pack MyProject.csproj”命令。到目前为止,我们一直在使用 VS2010 (:OI know),它一直在愉快地吐出 nupkg 文件。

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

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

我试过的:

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

我是否缺少一些简单的东西可以在不进行大量修改的情况下使其工作?

4

2 回答 2

1

错误 NU5012:无法找到“MyProject.dll”。确保项目已经构建。

此消息表明 nuget.exe 找不到输出程序集。因此,您必须确保成功创建程序集。

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

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

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

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

于 2019-09-04T02:59:46.737 回答
0

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

这是我添加到 js 文件中的行(朝向页面底部): nugetTool.arg("-Build");

如果有用例在没有 -Build 开关的情况下调用 Nuget 包,最好将此选项表示为复选框

于 2019-10-24T15:46:07.363 回答