web-dev-qa-db-ja.com

複数のターゲットを持つCSPROJのXMLドキュメントを生成する方法

複数のターゲットを持つライブラリプロジェクトがあります。 CSPROJファイルでは、次のようになります。

<TargetFrameworks>net40;net46;net461;net462;net47</TargetFrameworks>

これらのターゲットフレームワークとDebugおよびRelease構成のすべての組み合わせのXMLドキュメントが必要な場合は、ビルド構成マネージャーを使用してUIで順番に選択し、XMLをビルドするように設定する必要があります。その組み合わせと各組み合わせのドキュメントは、CSPROJでPropertyGroupとして個別にリストされ、XMLドキュメント用の出力ファイルが意図されています。

もっと良い方法はありますか?

このドキュメントがオンラインの他のどこにも見つからなかったため、質問と回答を投稿します

21
Ian Mercer

簡単な方法は、GenerateDocumentationFileプロパティをtrueに設定することです。 VS UIはパスを設定する必要があります。MSBuildターゲットは、パスが設定されている場合はこのプロパティをtrueに設定し、GenerateDocumentationFileプロパティがtrueの場合はデフォルトパスを設定します。これをcsprojファイルに追加できます:

<PropertyGroup>
  <GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>

すべてのプロジェクトで共有するためにこれをtrueに設定する場合は、 Directory.Build.props ソリューションのディレクトリに次の内容が含まれており、以下のディレクトリ階層のプロジェクトに自動インポートされます。

<Project>
  <PropertyGroup>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
  </PropertyGroup>
</Project>
36
Martin Ullrich

これを修正する1つの方法は、各CSPROJファイルに以下を含めることです。

<!-- Build XML documentation for all combinations of target framework x configuration -->
<PropertyGroup>
 <DocumentationFile>bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml 
 </DocumentationFile>
</PropertyGroup>

さらに良い方法は、共有設定ファイルにリンクすることです:

<!-- This must come after any other configuration so that it overwrites it -->
<Import Project="$(MSBuildThisFileDirectory)..\Shared.msbuild" />

...次に、上記の行を共有構成ファイルに配置します。ここで、ProductCompanyCopyright、など、ソリューション全体の他のすべてのCSPROJ設定も設定できます。 ..

5
Ian Mercer