2009-09-07 10 views
9

Tengo un problema con la tarea Attrib desde MSBuild Community Tasks Project cuando se ejecuta en una máquina de compilación de 64 bits.MSBuild.Community.Tasks.Attrib en la máquina x64 que falla

He creado este pequeño proyecto de prueba para mostrar cuál es el problema:

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

cuando intento para construir este proyecto con MSBuild utilizando TestAttrib como el objetivo consigo los siguientes resultados

C:> msbuild "C: _Source Code \ Test.vbproj"/t: TestAttrib Microsoft (R) Build Engine Versión 3.5.30729.1 [Microsoft .NET Framework, Versión 2.0.50727.4016] Copyright (C) Microsoft Corporation 2007. Todos los derechos reservados.

Build started 7/09/2009 2:50:12 PM.
Proyecto "C: _Source Code \ Test.vbproj" en el nodo 0 (TestAttrib target (s)).
MSBuildCommunityTasksLib: C: \ Archivos de programa \ MSBuild \ MSBuildCommunityTasks \ MSBU ild.Community.Tasks.dll
MSBuildNodeCount: 1
MSBuildExtensionsPath: C: \ Archivos de programa \ MSBuild
MSBuildExtensionsPath32: C: \ Archivos de programa (x86) \ MSBuild
MSBuildProjectDirectoryNoRoot: Código _Source
MSBuildToolsPath: C: \ Windows \ Microsoft.NET \ Framework64 \ v3.5
MSBuildToolsVersion: 3.5
MSBuildBinPath: C: \ Windows \ Microsoft.NET \ Framework64 \ v3.5
MSBuil dExtensionsPath: C: \ Archivos de programa \ MSBuild
MSBuildProjectDefaultTargets: Cuerpo
MSBuildProjectDirectory: C: Código _Source
MSBuildProjectExtension: .vbproj
MSBuildProjectFile: Test.vbproj
MSBuildProjectFullPath: C: Código _Source \ Test.vbproj
MSBuildProjectName : Prueba
MSBuildStartupDirectory: C: \
C: _Source Code \ Test.vbproj (26,5): error MSB4062: La tarea "MSBuild.Community.Tasks.Attrib" no se pudo cargar desde el ensamblado C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll. No se pudo cargar el archivo o ensamblado 'file: /// C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll' o una de sus dependencias. El sistema no puede encontrar el archivo especificado. Confirme que la declaración sea correcta y que el ensamblado y todas sus dependencias estén disponibles. Hecho Proyecto de construcción "C: _Source Code \ Test.vbproj" (TestAttrib target (s)) - FAILED.

Build FAILED.

"C: _Source Code \ Test.vbproj" (TestAttrib target) (1) -> (TestAttrib target) -> C: _Source Code \ Test.vbproj (26,5): error MSB4062: El "MSBuild. La tarea Community.Tasks.Attrib "no se pudo cargar desde el ensamblado C: \ Archivos de programa \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll. No se pudo cargar el archivo o ensamblado 'file: /// C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll' o una de sus dependencias. El sistema no puede encontrar el archivo especificado. Confirme que la declaración sea correcta y que el ensamblado y todas sus dependencias estén disponibles.

0 Warning(s) 
1 Error(s) 

Tiempo transcurrido 00:00:00.05

¿Por qué el MSBuild busca la tarea Attrib en C: \ Archivos de programa \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll cuando he importado explícitamente las tareas utilizando la variable (MSBuildExtensionsPath32)?

Respuesta

7

que parecen haber solucionado el problema mediante la línea de edición 6 de "C: \ Archivos de programa (x86) \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.Targets"
Originalmente fue:

<MSBuildCommunityTasksPath Condition="'$(MSBuildCommunityTasksPath)' == ''">$(MSBuildExtensionsPath)\MSBuildCommunityTasks</MSBuildCommunityTasksPath> 

y yo lo alteró a:

<MSBuildCommunityTasksPath Condition="'$(MSBuildCommunityTasksPath)' == ''">$(MSBuildExtensionsPath32)\MSBuildCommunityTasks</MSBuildCommunityTasksPath> 

nota el cambio de $ (MSBuildExtensionsPath) a $ (MSBuildExtensionsPath32)

Si bien esto se Por el momento, ems ha resuelto mi problema. No estoy seguro de por qué tuve que editar el archivo MSBuild.Community.Tasks.Targets en primer lugar. Supuse que el instalador se habría asegurado de que el archivo era correcto. Así que quizás editar el archivo MSBuild.Community.Tasks.Targets no sea la mejor idea del mundo, así que ten cuidado si decides seguir mi ejemplo.

+1

Tenía exactamente el mismo problema, gracias! – PatrickJ

5

Obviamente, esta es una respuesta demasiado tardía, pero pensé que podría agregar algo más si alguien tiene este problema. En lugar de editar el archivo MSBuild.Community.Tasks.Targets, puede definir la propiedad MSBuildCommunityTasksPath en un grupo de propiedades en su archivo de compilación. Por ejemplo, tengo algo como esto en la parte superior de mi escritura de la estructura:

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

entonces almacenar la carpeta MSBuildCommunityTasks en un directorio de herramientas de control de código fuente. Significa que otras personas pueden sacar la fuente y construirla de inmediato sin instalar nada.

Cheers, Adam

Cuestiones relacionadas