Msbuild 为什么NuGet pack会与VS2019构建工具决裂?

Msbuild 为什么NuGet pack会与VS2019构建工具决裂?,msbuild,nuget,visual-studio-2019,visual-studio-2017-build-tools,Msbuild,Nuget,Visual Studio 2019,Visual Studio 2017 Build Tools,我们有许多.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 ha

我们有许多.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 spec”步骤
  • 将nuget CLI可执行文件升级至最新版本
  • 从packages.config更新到PackageReferences
    • 这允许您使用MSBuild-t:pack。然而,有两个问题:
    • 当在我的机器上的后期构建步骤中运行此命令时,它会启动数十个cmd&MSBuild进程并固定我的CPU
    • 我们的开发人员目前仍停留在VS2017上,但2017构建工具不再适用于我们的构建服务器(因此我们使用2019)。2017和2019年的安装将MSBuild放置在不同的位置。我们可以为所有机器设置路径变量,但这似乎很脆弱
  • 我正在尝试将其中一个项目升级到新的csproj格式,但这相当复杂。升级我们所有的项目将是一项自己的努力,我仍在探索其后果
我是否缺少一些简单的东西,可以让它在无需大量修改的情况下工作?

错误NU5012:找不到“MyProject.dll”。确保项目顺利完成 已经建成

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

还有一点需要注意,通常我们使用类似于
nuget pack foo.csproj-Properties Configuration=Release的命令来打包在Release模式下构建的程序集。如果在生成后事件中使用类似于
numget pack xx.csproj
的命令,则无论使用
msbuild
构建项目的配置如何,
numget
都将始终尝试在
ProjectDir/bin/debug
中查找程序集

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

为什么NuGet pack会与VS2019构建工具决裂


此问题与构建工具包无关。因为你收到的错误消息来自nuget。Msbuild just help调用nuget.exe,问题的原因是
nuget.exe无法通过特定路径找到所需的程序集。请检查错误消息中的路径是否正确,然后检查程序集是否在该路径中。

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

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

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