首页 > 解决方案 > MSBuild 使用了错误的框架版本

问题描述

我正在制作一个 MSBuild 文件,在其中我需要使用 Microsoft.Build.Tasks.v4.0.dll,问题是 MSBuild 无法找到这个文件......它找不到它,因为 MSBuildToolsPath 指向错误.Net 框架的版本...为什么?我该如何阻止这种情况发生?为什么 ISNT 这个测试使用它编译的 MSBuild 版本?

我有以下简单的目标文件(我保存为 MSBuildTest.targets)来演示我看到的问题

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Default">
        <Message Text="$(MSBuildToolsPath)" />
    </Target>
</Project>

C:\Test> C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild MSBuildTest.targets

Microsoft (R) Build Engine 版本 4.7.3062.0 [Microsoft .NET Framework,版本 4.0.30319.42000] 版权所有 (C) Microsoft Corporation。版权所有。

构建开始于 2018 年 12 月 8 日 17:46:07。节点 1 上的项目“MSBuildTest.targets”(默认目标)。默认:

C:\windows\Microsoft.NET\Framework\v2.0.50727

完成构建项目“MSBuildTest.targets”(默认目标)。

构建成功。0 警告 0 错误

经过时间 00:00:00.07

那么,当我使用 MSBuild v4.0.30319执行时,为什么 MSBuildToolsPath 指向v2.0.50727

我确实做了一点挖掘,在注册表编辑器下,我有这个键

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0

...有了这个值...

MSBuildToolsPath = C:\Windows\Microsoft.NET\Framework64\v4.0.30319\

这让我发疯了,有什么帮助吗??

标签: .netmsbuild

解决方案


MSBuildTest.targets 的全部内容发布在问题中。

如下修改目标文件并设置ToolsVersion="4.0"会产生正确的输出,如下所示

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
    <Target Name="Default">
        <Message Text="$(MSBuildToolsPath)" />
    </Target>
</Project>

Microsoft (R) Build Engine 版本 4.7.3062.0 [Microsoft .NET Framework,版本 4.0.30319.42000] 版权所有 (C) Microsoft Corporation。版权所有。

构建开始于 17/08/2018 12:17:06。节点 1 上的项目“C:\test\MSBuildTest.targets”(默认目标)。默认:

C:\Windows\Microsoft.NET\Framework\v4.0.30319

完成构建项目“C:\test\MSBuildTest.targets”(默认目标)。

我认为问题在于,在使用特定版本的 MSBuild 进行构建时,我希望 MSBuildToolsPath 会根据我使用的 MSBuild 版本进行设置。


推荐阅读