我正在设计一个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 \
这让我发疯了,有什么帮助吗?
答案 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。