2

<DocumentationFile>MSBuild プロジェクトでプロパティを設定するとCoreCompile、すべてのファイルが存在し、最新の状態であっても、タスクは常に実行されます。

MSBuild は、CoreCompileファイル"C:\Users\Georges\Documents\Visual Studio 2010\Projects\Test\Test\bin\Debug\Test.XML"が存在しないためタスクを実行すると言いますが、存在し、最新です。

詳細は以下。

私の MsBuild ファイル

Visual Studio 2010 でまったく新しいコンソール アプリケーション プロジェクトを作成し、次の行を(ファイルの末尾近くの の直前.csprojに) に追加しました。import$(MSBuildToolsPath)\Microsoft.CSharp.targets

  <PropertyGroup>
    <TargetsTriggeredByCompilation>
      $(TargetsTriggeredByCompilation);MyTarget
    </TargetsTriggeredByCompilation>
    <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
    <DocumentationFile>$(MSBuildProjectDirectory)\$(OutputPath)$(MSBuildProjectName).XML</DocumentationFile>
  </PropertyGroup>
  <Target Name="MyTarget">
    <Message Text="MyTarget was executed." />
  </Target>

使用理由はここUseHostCompilerIfAvailableで説明します。

目的はMyTarget、ターゲットが実行するときにのみ実行することですCoreCompile

MSBuild の出力

でコンパイルしF6、MSBuild の冗長性をDiagnosticinに設定するとTools->Options->Projects and solutions->Build and run、次の出力が得られます。

それなし<DocumentationFile>

行を削除すると

<DocumentationFile>$(MSBuildProjectDirectory)\$(OutputPath)$(MSBuildProjectName).XML</DocumentationFile>

次に、CoreCompile ターゲットが無視されます。これは正しいです。

Cible "CoreCompile : (IdCible:35)" dans le fichier "c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets" du projet "C:\Users\Georges\Documents\Visual Studio 2010\Projects\Test\Test\Test.csproj" (la cible "Compile" en dépend) :
La cible est ignorée "CoreCompile", car tous les fichiers de sortie sont à jour par rapport aux fichiers d'entrée.
Fichiers d'entrée : Program.cs;Properties\AssemblyInfo.cs;C:\Users\Georges\AppData\Local\Temp\.NETFramework,Version=v4.0,Profile=Client.AssemblyAttributes.cs;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\Microsoft.CSharp.dll;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\mscorlib.dll;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Core.dll;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Data.DataSetExtensions.dll;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Data.dll;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.dll;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Xml.dll;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Xml.Linq.dll;c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets;c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.NETFramework.props;C:\Users\Georges\Documents\Visual Studio 2010\Projects\Test\Test\Test.csproj;c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets;c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.NETFramework.targets;c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Xaml.targets
Fichiers de sortie : obj\x86\Debug\Test.exe;obj\x86\Debug\Test.pdb
Génération de la cible "CoreCompile" terminée dans le projet "Test.csproj". : (IdCible:35)

<DocumentationFile>

ラインを守れば

<DocumentationFile>$(MSBuildProjectDirectory)\$(OutputPath)$(MSBuildProjectName).XML</DocumentationFile>

次に、CoreCompileターゲットが実行されますが、これは正しくありません。

MSBuild は、出力ファイル"C:\Users\Georges\Documents\Visual Studio 2010\Projects\Test\Test\bin\Debug\Test.XML"が存在しないために実行されると言っていますが、実際に存在することを 100% 確信しています (パスを逐語的にコピーして Notepad++ のopenダイアログに貼り付けると、実際にファイルが開きます)。

<DocumentationFile>プロパティを次のように設定してみました:

  • $(MSBuildProjectDirectory)\$(OutputPath)$(MSBuildProjectName).XML
  • $(MSBuildProjectDirectory)\$(OutputPath)\$(MSBuildProjectName).XML
  • $(OutputPath)\$(MSBuildProjectName).XML
  • $(OutputPath)$(MSBuildProjectName).XML
  • bin\Debug\Test.XML
  • bin\Debug\Test.XMLタブのプロジェクトのプロパティを介してデフォルト値 ( ) を設定しBuildます。

しかし、それは何も変更しませんCoreCompile。ターゲットは引き続き実行されます。

Cible "CoreCompile : (IdCible:35)" dans le fichier "c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets" du projet "C:\Users\Georges\Documents\Visual Studio 2010\Projects\Test\Test\Test.csproj" (la cible "Compile" en dépend) :
Génération complète de la cible "CoreCompile".
Le fichier de sortie "C:\Users\Georges\Documents\Visual Studio 2010\Projects\Test\Test\bin\Debug\Test.XML" n'existe pas.
Tâche "Csc" (IDTâche:13)
  C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /platform:x86 /errorreport:prompt /warn:4 /doc:"C:\Users\Georges\Documents\Visual Studio 2010\Projects\Test\Test\bin\Debug\Test.XML" /define:DEBUG;TRACE /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\Microsoft.CSharp.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\mscorlib.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Core.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Data.DataSetExtensions.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Data.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Xml.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\x86\Debug\Test.exe /target:exe /utf8output Program.cs Properties\AssemblyInfo.cs "C:\Users\Georges\AppData\Local\Temp\.NETFramework,Version=v4.0,Profile=Client.AssemblyAttributes.cs" (IDTâche:13)
  Compilateur Microsoft (R) Visual C# 2010 version 4.0.30319.1 (IDTâche:13)
  Copyright (C) Microsoft Corporation. Tous droits réservés. (IDTâche:13)
   (IDTâche:13)
Exécution de la tâche "Csc" terminée. (IDTâche:13)
Tâche "CallTarget" (IDTâche:14)
Cible "MyTarget : (IdCible:36)" du projet "C:\Users\Georges\Documents\Visual Studio 2010\Projects\Test\Test\Test.csproj" (la cible "CoreCompile" en dépend) :
Tâche "Message" (IDTâche:15)
  MyTarget was executed. (IDTâche:15)
Exécution de la tâche "Message" terminée. (IDTâche:15)
Génération de la cible "MyTarget" terminée dans le projet "Test.csproj". : (IdCible:36)
Exécution de la tâche "CallTarget" terminée. (IDTâche:14)
Génération de la cible "CoreCompile" terminée dans le projet "Test.csproj". : (IdCible:35)
4

0 に答える 0