MSBuild使用错误的框架版本

时间:2018-08-12 16:51:35

标签: .net msbuild

我正在设计一个MSBuild文件,并且在其中需要使用Microsoft.Build.Tasks.v4.0.dll,问题是MSBuild无法找到该文件...并且由于MSBuildToolsPath指向而无法找到它.net框架版本错误...为什么?如何阻止这种情况发生?为什么要使用编译时所用的MSBuild版本进行ISNT此测试?

我有以下简单的目标文件(已保存为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。保留所有权利。

     

构建于12/08/2018 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 \

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

1 个答案:

答案 0 :(得分:0)

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进行构建时,我希望根据我使用的MSBuild版本来设置MSBuildToolsPath。