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

时间:2019-09-03 20:27:00

标签: msbuild nuget visual-studio-2019 visual-studio-2017-build-tools

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

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

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

我尝试过的事情:

  • 在打包之前添加一个“ nuspec spec”步骤
  • 将nuget CLI可执行文件升级到最新版本
  • 从packages.config更新到PackageReferences
    • 这使您可以使用MSBuild -t:pack。但是,有两个问题:
    • 在计算机上的后构建步骤中运行此命令时,它将启动数十个cmd和MSBuild进程并固定我的CPU。
    • 我们的开发人员暂时还停留在VS2017上,但是2017年构建工具不再可用于我们的构建服务器(因此我们使用2019年)。 2017年和2019年的安装将MSBuild放置在不同的位置。我们可以为所有机器设置路径变量,但这似乎很脆弱。
  • 我正在将其中一个项目升级为新的csproj格式,但确实涉及其中。升级我们所有的项目将全力以赴,而我仍在探索后果。

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

2 个答案:

答案 0 :(得分:1)

  

错误NU5012:找不到'MyProject.dll'。确保项目   已建立。

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

有一点需要注意,通常我们使用nuget pack foo.csproj -Properties Configuration=Release之类的命令来打包以发布模式构建的程序集。如果在构建事件后使用nuget pack xx.csproj之类的命令,则无论您使用msbuild进行哪种配置来构建项目,nuget都将始终尝试在{{1}中查找程序集}。

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

  

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

此问题与构建工具包无关。由于您收到的错误消息来自nuget。 Msbuild仅帮助调用nuget.exe,问题的原因是bin\release。请检查错误消息中的路径是否正确,然后检查程序集是否在该路径中。

答案 1 :(得分:0)

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

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

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