当在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框架,版本2.0.50727.4016版权所有(C) Microsoft Corporation 2007。版权所有。
构建已启动7/09/2009 2:50:12 PM
节点0上的项目"C:_Source Code\Test.vbproj“(TestAttrib目标)。
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代码
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:构建
MSBuildProjectDirectory: C:_Source代码
MSBuildProjectExtension:.vbproj
MSBuildProjectFile: Test.vbproj
MSBuildProjectFullPath: C:_Source Code\Test.vbproj
MSBuildProjectName:测试
MSBuildStartupDirectory: C:\
C:_Source Code\Test.vbproj(26,5):错误MSB4062:无法从程序集C:\Program MSB4062加载"MSBuild.Community.Tasks.Attrib“任务未能加载文件或程序集的file:///C:\Program Files\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll‘或其依赖项之一。系统找不到指定的文件。确认声明是正确的,并且程序集及其所有依赖项都可用。已完成生成项目"C:_Source Code\Test.vbproj“(TestAttrib目标) --失败。
生成失败。
"C:_Source Code\Test.vbproj“(TestAttrib目标) (1) ->(TestAttrib目标) -> 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
当我使用(MSBuildExtensionsPath32)变量显式导入任务时,为什么MSBuild要在C:\Program Files\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll中搜索Attrib任务?
发布于 2009-09-07 07:02:26
我似乎已经通过编辑"C:\Program Files (x86)\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets“”的第6行修复了这个问题
最初是:
<MSBuildCommunityTasksPath Condition="'$(MSBuildCommunityTasksPath)' == ''">$(MSBuildExtensionsPath)\MSBuildCommunityTasks</MSBuildCommunityTasksPath>我把它改成:
<MSBuildCommunityTasksPath Condition="'$(MSBuildCommunityTasksPath)' == ''">$(MSBuildExtensionsPath32)\MSBuildCommunityTasks</MSBuildCommunityTasksPath>注意$(MSBuildExtensionsPath)到$(MSBuildExtensionsPath32)的更改
虽然这似乎已经解决了我现在的问题,但我不确定为什么我必须首先编辑MSBuild.Community.Tasks.Targets文件-我以为安装程序会确保该文件是正确的。因此,也许编辑MSBuild.Community.Tasks.Targets文件并不是最好的主意,所以如果您决定遵循我的建议,一定要小心。
发布于 2011-10-10 07:40:33
这显然是一个为时已晚的答案,但我想我会补充这一点,以防其他人有这个问题。您可以只在构建文件的属性组中定义MSBuildCommunityTasksPath属性,而不是编辑MSBuild.Community.Tasks.Targets文件。例如,我在构建脚本的顶部有如下内容:
<PropertyGroup>
<ToolsDirectory>$(MSBuildProjectDirectory)\tools</ToolsDirectory>
<MSBuildCommunityTasksPath>$(ToolsDirectory)\MSBuildCommunityTasks</MSBuildCommunityTasksPath>
</PropertyGroup>然后,我将MSBuildCommunityTasks文件夹存储在源代码管理中的工具目录中。这意味着其他人可以拉出源代码并直接构建它,而不需要安装任何东西。
干杯,亚当
发布于 2019-03-29 00:36:01
这是非常过时的帮助。自此票证以来,ms构建过程已发生变化,最好按照此处的说明进行操作https://github.com/loresoft/msbuildtasks
对于我的项目,我在解决方案中使用了Build文件夹,并在该解决方案中创建了一个MSBuildTasks文件夹,我在该文件夹中复制Zip文件版本中的最新MBBuild.Community.Task文件。并将以下行放入我的msbuild文件中
<PropertyGroup>
<MSBuildCommunityTasksPath>.\MSBuildTasks</MSBuildCommunityTasksPath>
</PropertyGroup>
<Import Project=".\MSBuildTasks\MSBuild.Community.Tasks.Targets" />https://stackoverflow.com/questions/1387616
复制相似问题