【问题标题】:MSBuild.Community.Tasks.Attrib on x64 machine failingx64 机器上的 MSBuild.Community.Tasks.Attrib 失败
【发布时间】:2009-09-07 05:05:19
【问题描述】:

在 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>

当我尝试使用 MSBuild 使用 TestAttrib 作为目标构建此项目时,我得到以下结果

C:>msbuild "C:_Source Code\Test.vbproj" /t:TestAttrib Microsoft (R) 构建引擎版本 3.5.30729.1 [Microsoft .NET 框架,版本 2.0.50727.4016] 版权所有 (C) Microsoft Corporation 2007。保留所有权利。

构建于 2009 年 7 月 9 日下午 2:50:12 开始。
节点 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:_源代码
MSBuildToolsPath:c:\Windows\Microsoft.NET\Framework64\v3.5
MSBuildTools 版本:3.5
MSBuildBinPath:c:\Windows\Microsoft.NET\Framework64\v3.5
MSBuildExtensionsPath:C:\Program Files\MSBuild
MSBuildProjectDefaultTargets:构建
MSBuildProjectDirectory: C:_源代码
MSBuildProjectExtension:.vbproj
MSBuildProjectFile:Test.vbproj
MSBuildProjectFullPath: C:_Source Code\Test.vbproj
MSBuildProjectName:测试
MSBuildStartupDirectory: C:\
C:_Source Code\Test.vbproj(26,5):错误 MSB4062:无法从程序集 C:\Program Files\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks 加载“MSBuild.Community.Tasks.Attrib”任务.dll。无法加载文件或程序集“file:///C:\Program Files\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll”或其依赖项之一。该系统找不到指定的文件。确认声明正确,并且程序集及其所有依赖项都可用。 已完成构建项目“C:_Source Code\Test.vbproj”(TestAttrib 目标)——失败。

构建失败。

"C:_Source Code\Test.vbproj" (TestAttrib target) (1) ->(TestAttrib target) -> C:_Source Code\Test.vbproj(26,5): error MSB4062: The "MSBuild.Community .Tasks.Attrib" 任务无法从程序集 C:\Program Files\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll 加载。无法加载文件或程序集“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 任务?

【问题讨论】:

    标签: msbuild 64-bit msbuildcommunitytasks


    【解决方案1】:

    我似乎通过编辑“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 文件并不是世界上最好的主意,所以如果你决定跟随我的领导,请小心。

    【讨论】:

    • 这是非常过时的帮助。自此票以来,ms 构建过程已更改,最好按照此处的说明进行操作 github.com/loresoft/msbuildtasks 对于我的项目,我在解决方案中使用了 Build 文件夹,并在解决方案中创建了一个 MSBuildTasks 文件夹,我在其中复制了最新的 MBBuild.Community.Task Zip 文件版本中的文件。然后我改为引用我创建的文件夹中的文件
    【解决方案2】:

    这显然为时已晚,但我想我会补充一下,以防其他人遇到这个问题。无需编辑 MSBuild.Community.Tasks.Targets 文件,您只需在构建文件的属性组中定义 MSBuildCommunityTasksPath 属性。例如,我的构建脚本顶部有这样的内容:

    <PropertyGroup>
      <ToolsDirectory>$(MSBuildProjectDirectory)\tools</ToolsDirectory>
      <MSBuildCommunityTasksPath>$(ToolsDirectory)\MSBuildCommunityTasks</MSBuildCommunityTasksPath>
    </PropertyGroup>
    

    然后,我将 MSBuildCommunityTasks 文件夹存储在源代码管理的工具目录中。这意味着其他人可以提取源代码并立即构建它而无需安装任何东西。

    干杯, 亚当

    【讨论】:

      【解决方案3】:

      这是非常过时的帮助。自此票以来,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" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-16
        • 1970-01-01
        相关资源
        最近更新 更多