2009-09-07 2 views
9

У меня возникла проблема с задачей Attrib из MSBuild Community Tasks Project при работе на 64-битной машине сборки.MSBuild.Community.Tasks.Attrib на компьютере с ошибкой x64

Я соединил этот небольшой тестовый проект, чтобы показать, что проблема:

<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 как Target я получаю следующие результаты

C:> msbuild «C: _Source Code \ Test.vbproj»/t: TestAttrib Версия Microsoft Build Engine 3.5.30729.1 [Microsoft .NET Framework, версия 2.0.50727.4016] Copyright (C) Microsoft Corporation 2007. Все права защищены.

Сборка началась 7/09/2009 2:50:12 PM.
Проект «C: _Source Code \ Test.vbproj» на узле 0 (TargetAttrib 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 Код
MSBuildToolsPath: C: \ Windows \ Microsoft.NET \ Framework64 \ v3.5
MSBuildToolsVersion: 3,5
MSBuildBinPath: C: \ Windows \ Microsoft.NET \ Framework64 \ v3.5
MSBuil dExtensionsPath: C: \ Program Files \ MSBuild
MSBuildProjectDefaultTargets: Построить
MSBuildProjectDirectory: C: _Source Код
MSBuildProjectExtension: .vbproj
MSBuildProjectFile: Test.vbproj
MSBuildProjectFullPath: C: _Source Код \ Test.vbproj
MSBuildProjectName : Тест
MSBuildStartupDirectory: C: \
C: _Системный код \ Test.vbproj (26,5): ошибка MSB4062: Задача «MSBuild.Community.Tasks.Attrib» не может быть загружена из сборки C: \ Program файлы \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll. Не удалось загрузить файл или сборку: /// C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll или одна из его зависимостей. Система не может найти указанный файл. Убедитесь, что объявление верное, и что сборка и все ее зависимости доступны. Done Building Project "C: _Source Code \ Test.vbproj" (TestAttrib target (s)) - FAILED.

Сборка НЕИСПРАВНО.

«C: _Source Code \ Test.vbproj» (TargetAttrib target) (1) -> (TargetAttrib target) -> C: _Системный код \ Test.vbproj (26,5): ошибка MSB4062: «MSBuild. Community.Tasks.Attrib "не может быть загружена из сборки C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll. Не удалось загрузить файл или сборку: /// C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll или одна из его зависимостей. Система не может найти указанный файл. Убедитесь, что объявление верное, и что сборка и все ее зависимости доступны.

0 Warning(s) 
1 Error(s) 

Время, прошедшее 00:00:00.05

Почему MSBuild ищет задачу Attrib в C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll, когда я явно импортировал задачи с помощью переменной (MSBuildExtensionsPath32)?

ответ

7

Я, кажется, исправили проблему путем редактирования строки 6 "C: \ Program Files (x86) \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.Targets"
Первоначально:

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

и я изменил его:

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

примечание изменение $ (MSBuildExtensionsPath) до $ (MSBuildExtensionsPath32)

в то время как это себе ems, чтобы разобраться в моей проблеме на данный момент, я не уверен, почему мне пришлось сначала отредактировать файл MSBuild.Community.Tasks.Targets - я предположил, что установщик удостоверился, что файл верен. Поэтому, возможно, редактирование файла MSBuild.Community.Tasks.Targets - не лучшая идея в мире, поэтому будьте осторожны, если решите следовать моему примеру.

+1

Если бы точно такая же проблема, спасибо! – PatrickJ

5

Это, очевидно, слишком поздно, но я подумал, что добавлю к этому, если кто-то еще столкнется с этой проблемой. Вместо редактирования файла MSBuild.Community.Tasks.Targets вы можете просто определить свойство MSBuildCommunityTasksPath в группе свойств в файле сборки. Например, у меня есть что-то вроде этого в верхней части моего сценария сборки:

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

Я тогда хранить папку MSBuildCommunityTasks в каталоге инструментов в системе управления версиями. Это означает, что другие люди могут вытащить источник и построить его сразу, не устанавливая ничего.

Cheers, Адам