Msbuild 为什么NuGet pack会与VS2019构建工具决裂?
我们有许多.NET Framework项目在后期构建步骤中使用“nuget pack MyProject.csproj”命令。到目前为止,我们一直在使用VS2010(:O我知道),并且它一直在愉快地输出nupkg文件 我们最近将构建工具更新为2019版本(在调用msbuild之前运行新版本的varsall.bat),而“nuget pack”命令现在失败: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
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格式,但这相当复杂。升级我们所有的项目将是一项自己的努力,我仍在探索其后果
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的用例