9

64ビットビルドマシンで実行しているときに、 MSBuild CommunityTasksProjectの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)BuildEngineバージョン3.5.30729.1[Microsoft .NET Framework、バージョン2.0.50727.4016] Copyright(C)Microsoft Corporation 2007. All rights reserved 。

ビルドは2009年7月9日午後2時50分12秒に開始されました。
ノード0(TestAttribターゲット)のプロジェクト「C:_SourceCode\Test.vbproj」。
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コード
MSBuildProjectExtension:.vbproj
MSBuildProjectFile:Test.vbproj
MSBuildProjectFullPath:C:_Source Code \ Test.vbproj
MSBuildProjectName:Test
MSBuildStartupDirectory:C:\
C:_Source Code \ Test.vbproj(26,5):エラーMSB4062:"MSBuild.Community。 Tasks.Attrib "タスクをアセンブリC:\ Program Files \ MSBuild \ MSBuildCommunityTasks\MSBuild.Community.Tasks.dllから読み込めませんでした。ファイルまたはアセンブリ'file:/// C:\ Program Files \ MSBuild \ MSBuildCommunityTasks\MSBuild.Community.Tasks.dll'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。宣言が正しいこと、およびアセンブリとそのすべての依存関係が使用可能であることを確認してください。プロジェクト「C:_SourceCode \ Test.vbproj」(TestAttribターゲット)の構築が完了しました-失敗しました。

ビルドに失敗しました。

"C:_Source Code \ Test.vbproj"(TestAttrib target)(1)->(TestAttrib target)-> C:_Source Code \ Test.vbproj(26,5):エラーMSB4062:"MSBuild.Community.Tasks。 Attrib "タスクをアセンブリC:\ Program Files \ MSBuild \ MSBuildCommunityTasks\MSBuild.Community.Tasks.dllから読み込めませんでした。ファイルまたはアセンブリ'file:/// C:\ Program Files \ MSBuild \ MSBuildCommunityTasks\MSBuild.Community.Tasks.dll'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。宣言が正しいこと、およびアセンブリとそのすべての依存関係が使用可能であることを確認してください。

0 Warning(s)
1 Error(s)

経過時間00:00:00.05

(MSBuildExtensionsPath32)変数を使用してタスクを明示的にインポートしたのに、MSBuildがC:\ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dllでAttribタスクを検索するのはなぜですか?

4

3 に答える 3

6

これは明らかに遅すぎる答えですが、他の誰かがこの問題を抱えている場合に備えて、これに追加すると思いました。MSBuild.Community.Tasks.Targetsファイルを編集する代わりに、ビルドファイルのプロパティグループでMSBuildCommunityTasksPathプロパティを定義するだけです。たとえば、ビルドスクリプトの上部に次のようなものがあります。

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

次に、MSBuildCommunityTasksフォルダーをソース管理のツールディレクトリに保存します。これは、他の人がソースを引き出して、何もインストールせずにすぐにビルドできることを意味します。

乾杯、アダム

于 2011-10-09T23:40:32.657 に答える
6

「C:\ ProgramFiles(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ファイルを編集することは、世界で最善のアイデアではない可能性があります。したがって、私のリードに従うことにした場合は注意してください。

于 2009-09-07T07:02:25.580 に答える
0

これは非常に時代遅れのヘルプです。このチケット以降、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" />
于 2019-03-28T16:36:01.020 に答える