【发布时间】:2018-09-24 03:41:09
【问题描述】:
NuGet 显然有一些逻辑来确定要使用的 MSBuild 可执行文件。有没有办法覆盖这种行为?或者至少有一种方法告诉它使用 x86 MSBuild 而不是 x64?
MSBuild 自动检测:使用来自“C:\Program Files (x86)\MSBuild\14.0\bin\amd64”的 msbuild 版本“14.0”。
【问题讨论】:
NuGet 显然有一些逻辑来确定要使用的 MSBuild 可执行文件。有没有办法覆盖这种行为?或者至少有一种方法告诉它使用 x86 MSBuild 而不是 x64?
MSBuild 自动检测:使用来自“C:\Program Files (x86)\MSBuild\14.0\bin\amd64”的 msbuild 版本“14.0”。
【问题讨论】:
从command-line documentation,您可以在命令行中指定-MSBuildPath 或-MSBuildVersion。
MSBuildPath(4.0+) 指定要与 命令,优先于 -MSBuildVersion。
MSBuildVersion(3.2+) 指定要与此命令一起使用的 MSBuild 版本。 支持的值为 4、12、14、15。默认情况下,您的 MSBuild 选择路径,否则默认为最高安装版本 MSBuild。
【讨论】:
nuget命令行使用的msbuild版本是硬编码的:
冒犯方式是GetMsBuildFromMonoPaths(...)
没有环境变量可以覆盖它。这叫做“自动检测”,哈哈。
解决方案是移走/Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/msbuild/15.0 文件夹,使用dotnet-install.sh 方法安装msbuild 16.0(msbuild 16 使用版本5.0.402),并创建一个从dotnet/sdk/$netcoreversion 到硬编码路径@987654327 的符号链接@
【讨论】: