【发布时间】:2018-08-12 16:51:34
【问题描述】:
我正在制作一个 MSBuild 文件,我需要在其中使用 Microsoft.Build.Tasks.v4.0.dll,问题是 MSBuild 无法找到此文件...它找不到它,因为 MSBuildToolsPath 指向在 .Net 框架的错误版本中...为什么?我该如何阻止这种情况发生?为什么不使用编译它的 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 框架,版本 4.0.30319.42000] 版权所有 (C) 微软公司。保留所有权利。
构建于 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\
这快把我逼疯了,有什么帮助吗??
【问题讨论】:
-
“MSBuild.targets”并不是每个人的机器上都有。如果你想要一个答案,让它在任何地方都可以重现。
-
我在问题中提供了“MSBuild.targets”的全部内容。我会修改以明确说明这是唯一的文件。