我在64位构建机上使用MSBuild Community Tasks Project的Attrib任务时出现了问题。
我编写了这个小测试项目来展示问题所在:
<Project ToolsVersion="3.5" DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath32)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<Target Name="PrintProperties">
<Message Text="MSBuildCommunityTasksPath: $(MSBuildCommunityTasksPath)"/>
<Message Text="MSBuildCommunityTasksLib: $(MSBuildCommunityTasksLib)"/>
<Message Text="MSBuildNodeCount: $(MSBuildNodeCount)"/>
<Message Text="MSBuildExtensionsPath: $(MSBuildExtensionsPath)"/>
<Message Text="MSBuildExtensionsPath32: $(MSBuildExtensionsPath32)"/>
<Message Text="MSBuildProjectDirectoryNoRoot: $(MSBuildProjectDirectoryNoRoot)"/>
<Message Text="MSBuildToolsPath: $(MSBuildToolsPath)"/>
<Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)"/>
<Message Text="MSBuildBinPath: $(MSBuildBinPath)"/>
<Message Text="MSBuildExtensionsPath: $(MSBuildExtensionsPath)"/>
<Message Text="MSBuildProjectDefaultTargets: $(MSBuildProjectDefaultTargets)"/>
<Message Text="MSBuildProjectDirectory: $(MSBuildProjectDirectory)"/>
<Message Text="MSBuildProjectExtension: $(MSBuildProjectExtension)"/>
<Message Text="MSBuildProjectFile: $(MSBuildProjectFile)"/>
<Message Text="MSBuildProjectFullPath: $(MSBuildProjectFullPath)"/>
<Message Text="MSBuildProjectName: $(MSBuildProjectName)"/>
<Message Text="MSBuildStartupDirectory: $(MSBuildStartupDirectory)"/>
</Target>
<Target Name="TestAttrib" DependsOnTargets="PrintProperties">
<Attrib Files="Test.txt" ReadOnly="false" />
</Target>
</Project>
当我尝试使用TestAttrib作为目标来使用MSBuild构建这个项目时,我得到了以下结果:
C:>msbuild“C:_Source Code\Test.vbproj”/t:TestAttrib Microsoft(R)Build Engine版本3.5.30729.1 [Microsoft .NET Framework,版本2.0.50727.4016] 版权所有(C)Microsoft Corporation 2007。保留所有权利。
构建开始于7/09/2009 2:50:12 PM。 位于节点0上的“C:_Source Code\Test.vbproj”项目(TestAttrib target(s))。 MSBuildCommunityTasksLib:C:\Program Files\MSBuild\MSBuildCommunityTasks\MSBu ild.Community.Tasks.dll MSBuildNodeCount:1 MSBuildExtensionsPath:C:\Program Files\MSBuild MSBuildExtensionsPath32:C:\Program Files(x86)\MSBuild MSBuildProjectDirectoryNoRoot:_Source Code MSBuildToolsPath:c:\Windows\Microsoft.NET\Framework64\v3.5 MSBuildToolsVersion:3.5 MSBuildBinPath:c:\Windows\Microsoft.NET\Framework64\v3.5 MSBuildExtensionsPath:C:\Program Files\MSBuild MSBuildProjectDefaultTargets:Build MSBuildProjectDirectory:C:_Source Code MSBuildProjectExtension:.vbproj MSBuildProjectFile:Test.vbproj MSBuildProjectFullPath:C:_Source Code\Test.vbproj MSBuildProjectName:Test MSBuildStartupDirectory:C:\ C:_Source Code\Test.vbproj(26,5):错误MSB4062:无法从程序集C:\Program Files\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll中加载“MSBuild.Community.Tasks.Attrib”任务。无法加载文件或程序集'file:///C:\Program Files\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll'或其中的一个依赖项。系统找不到指定的文件。请确认声明正确,并且程序集及其所有依赖项都可用。 完成项目“C:_Source Code\Test.vbproj”(TestAttrib target(s))-- FAILED。
构建失败。
“C:_Source Code\Test.vbproj”(TestAttrib target)(1)->(TestAttrib target) -> C:_Source Code\Test.vbproj(26,5):错误MSB4062:无法从程序集C:\Program Files\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll中加载“MSBuild.Community.Tasks.Attrib”任务。无法加载文件或程序集'file:///C:\Program Files\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll'或其中的一个依赖项。系统找不到指定的文件。请确认声明正确,并且程序集及其所有依赖项都可用。
0 Warning(s)
1 Error(s)
已用时间 00:00:00.05
为什么 MSBuild 在我明确使用 (MSBuildExtensionsPath32) 变量导入任务时,仍在 C:\Program Files\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll 中搜索 Attrib 任务?