web-dev-qa-db-fra.com

Comment générer de la documentation XML pour CSPROJ avec plusieurs cibles

J'ai un projet de bibliothèque qui a plusieurs cibles, par exemple dans le fichier CSPROJ, il a:

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

Si je veux de la documentation XML pour toutes les combinaisons de ces frameworks cibles et configurations Debug et Release, je dois sélectionner chacune à son tour dans l'interface utilisateur à l'aide du Build Configuration Manager, puis la configurer pour construire XML la documentation de cette combinaison et chaque combinaison est ensuite répertoriée séparément sous la forme d'un PropertyGroup dans le CSPROJ avec le fichier de sortie prévu pour la documentation XML.

Y a-t-il une meilleure façon?

Publier une question et une réponse car je n'ai trouvé cela documenté nulle part ailleurs en ligne

21
Ian Mercer

Un moyen simple consiste à définir la propriété GenerateDocumentationFile sur true. L'interface utilisateur VS veut définir le chemin d'accès, les cibles MSBuild définiront cette propriété sur true si le chemin d'accès est défini ou définir un chemin par défaut si la propriété GenerateDocumentationFile est vraie. Vous pouvez donc l'ajouter à votre fichier csproj:

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

Si vous souhaitez définir la valeur true pour tous vos projets à partager, créez un fichier nommé Directory.Build.props dans le répertoire de votre solution avec le contenu suivant et il sera automatiquement importé dans tous les projets de la hiérarchie de répertoires ci-dessous:

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

Une façon de résoudre ce problème consiste à inclure les éléments suivants dans chaque fichier CSPROJ:

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

Une façon encore meilleure est de créer un lien vers un fichier de configuration partagé:

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

... puis placez les lignes ci-dessus dans ce fichier de configuration partagé où vous pouvez également définir tous les autres paramètres CSPROJ à l'échelle de la solution tels que Product, Company, Copyright,. ..

5
Ian Mercer