【问题标题】:How Can I Tell NuGet What MSBuild Executable to Use?我如何告诉 NuGet 使用什么 MSBuild 可执行文件?
【发布时间】:2018-09-24 03:41:09
【问题描述】:

NuGet 显然有一些逻辑来确定要使用的 MSBuild 可执行文件。有没有办法覆盖这种行为?或者至少有一种方法告诉它使用 x86 MSBuild 而不是 x64?

MSBuild 自动检测:使用来自“C:\Program Files (x86)\MSBuild\14.0\bin\amd64”的 msbuild 版本“14.0”。

【问题讨论】:

    标签: msbuild nuget


    【解决方案1】:

    command-line documentation,您可以在命令行中指定-MSBuildPath-MSBuildVersion

    MSBuildPath (4.0+) 指定要与 命令,优先于 -MSBuildVersion。

    MSBuildVersion (3.2+) 指定要与此命令一起使用的 MSBuild 版本。 支持的值为 4、12、14、15。默认情况下,您的 MSBuild 选择路径,否则默认为最高安装版本 MSBuild。

    【讨论】:

    • 谢谢@Rainer Sigwald;不知道我是如何错过文档的。使用最新的 Xamarin 安装程序 stackoverflow.com/questions/45350208/… 帮助我解决了这个问题
    • 但是这个命令行选项只影响当前命令,不会改变默认的msbuild检测。每次尝试恢复解决方案时,我都无法添加此选项。
    【解决方案2】:

    nuget命令行使用的msbuild版本是硬编码的:

    参考源码https://github.com/NuGet/NuGet.Client/blob/f24bad0668193ce21a1db8cabd1ce95ba509c7f0/src/NuGet.Clients/NuGet.CommandLine/MsBuildUtility.cs

    冒犯方式是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 的符号链接@

    【讨论】:

    • 可能值得用 NuGet 打开一个问题,它们通常反应灵敏?
    • @aolszowka 很好,他们不是。问题已经公开。
    • 你能链接 GitHub 问题吗?
    猜你喜欢
    • 2017-02-24
    • 2013-12-10
    • 2011-12-11
    • 1970-01-01
    • 2015-07-14
    • 2013-07-24
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    相关资源
    最近更新 更多