2011-10-21 3 views
1

MsBuildにmakedependのような構造化された形式のターゲット依存情報を出力させる方法はありますか?私は、C#プロジェクトとC++プロジェクトを含むソリューションのソリューションレベルでこれを必要としています。私は出力形式については気にしません。msbuildはmakedependと同様の依存関係情報を出力できますか?

私は、C#の依存関係は.csprojファイルを処理してDAGを構築することで判断できると考えています。同様に、私はC++ソースでオープンソースmakedependを実行し、そこから行くことができます。私は本当にここに自分自身を振り回さないようにしています。これは、診断目的でさえも、MsBuildがちょうどやるべきことだと思われます。

答えて

1

私はあまりヤックを削ることなくこれを解決しました。

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <!-- Write project dependencies to a .depends file, one line per dependency --> 
    <Target Name="OutputProjectDependencies"> 
    <Delete Files="$(OutputPath)\$(TargetFileName).depends"/> 
    <WriteLinesToFile File="$(OutputPath)\$(TargetFileName).depends" 
     Lines="@(CscDependencies->'%(FullPath)');@(ReferencePath->'%(FullPath)');@(Content->'%(FullPath)');@(_NoneWithTargetPath->'%(FullPath)')" 
     Overwrite="false" 
     Encoding="UTF-8"/> 
    <WriteLinesToFile File="$(OutputPath)\$(TargetFileName).depends" 
     Lines="@(ClDependencies->'%(FullPath)')" 
     Overwrite="false" 
     Encoding="UTF-8"/> 
    </Target> 

    <ItemGroup> 
    <CscDependencies Include="@(Compile);@(EmbeddedResource)"/> 
    <ClDependencies Include="@(ClCompile);@(ClInclude)"/> 
    </ItemGroup> 

    <PropertyGroup> 
    <BuildDependsOn> 
     $(BuildDependsOn); 
     OutputProjectDependencies; 
    </BuildDependsOn> 
    </PropertyGroup> 

</Project> 

これは私が好きなほど堅牢ではありません:明らかにMSBuildのは、そう、私のアプローチは.dependsファイルへの依存関係を書き込みカスタムターゲットをビルドをラップすることですビルド中に依存関係の情報を持っていますC++プロジェクトでは(ヘッダーとリンクライブラリの依存関係は含まれていませんが)、さらに強化される可能性があります。私はこれがC#にとって非常に堅実なアプローチだと考えています。参照されるアセンブリ、組み込みリソース、およびコンテンツが含まれています。

関連する問題