web-dev-qa-db-fra.com

asp.net webapi publish - les fichiers xml ne sont pas copiés

J'ai le projet WebApi de MVC 4.0 avec l'aide générée automatiquement basée sur ceci .

Mes classes de modèles sont stockées dans un autre projet de ma solution. La génération de fichier xml est activée pour chaque projet (Propriétés du projet -> Construire -> OutPut -> Fichier de documentation XML - Activé).

Dans le débogage local, tout est ok - les fichiers XML sont copiés dans le répertoire du projet et les commentaires des champs/classes d’un autre projet sont affichés.

Mais lorsque j'utilise le profil de publication (dans le dossier), les fichiers XML ne sont pas copiés dans le dossier de sortie. Un seul fichier XML du projet WebApi principal est copié. Donc, je ne vois pas les commentaires aux classes d'autres projets.

59

J'ai eu un problème similaire, pour moi la réponse était un peu "doh!" moment.

Dans les paramètres du projet, j'avais uniquement activé le fichier de documentation XML dans la configuration Debug, et non dans la version. Je déployais avec Release et la documentation XML n'était donc pas générée. Le correctif consistait donc à activer la documentation XML pour les configurations Debug et Release.

151
grimus

Vous pouvez le faire de deux manières différentes:

1) Accédez à la propriété de votre projet -> sélectionnez l’option de construction -> cochez la case "Fichier de documentation XML" -> ajoutez le chemin "App_data\XMLDocument.xml" -> paramètre de sauvegarde, votre fichier XMLDocument.xml -> sélectionnez une propriété -> copier dans le répertoire de sortie -> sélectionnez "Copier toujours"

2) Allez dans la propriété de votre projet -> sélectionnez l’option "Package/Publish Web" -> éléments à afficher -> sélectionnez "tous les fichiers de ce projet" dans la liste déroulante.

41

J'ai pu résoudre ce problème en utilisant une cible MSBuild personnalisée dans le fichier .pubxml de profil de publication. Suivez les étapes ci-dessous. Cette cible MSBuild copiera tous les fichiers .xml du dossier bin de l'API Web dans le dossier bin où vous publiez. Pas besoin de copier ces fichiers dans App_Data.

1) Ouvrez le fichier .pubxml approprié dans [Dossier Projet]\Properties\PublishProfiles.

2) Ajoutez cet extrait de code dans la balise <Project><PropertyGroup>:

<CopyAllFilesToSingleFolderForPackageDependsOn>
  CustomCollectFiles;
  $(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>

3) Ajoutez cet extrait après la balise <PropertyGroup>:

  <Target Name="CustomCollectFiles">
    <ItemGroup>
      <_CustomFiles Include="bin\*.xml" />

      <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
        <DestinationRelativePath>bin\%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>

Le crédit va à cette réponse , qui expliquait comment inclure des fichiers en dehors du répertoire du projet lors de la publication.

22
Keith

J'ai eu le même problème, que seul le fichier XML du projet webapi a été déployé.

Pour résoudre ce problème, je devais l'ajouter à mon fichier de projet Web (Api), dans le premier élément PropertyGroup.

<ExcludeXmlAssemblyFiles>false</ExcludeXmlAssemblyFiles>

Après cela, la documentation fichiers xml de tous les projets (s’il est activé) a été publiée !

7
martinoss

En complément de la réponse précédente, il existe également un autre type d'étiquette à inclure, comme dans l'article ci-dessous:

https://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/deploying-extra-files

Étiquette:

<CopyAllFilesToSingleFolderForMsdeployDependsOn>
  CustomCollectFiles;
  $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
6
Ivan

Une solution consiste à ajouter les fichiers XML à votre dossier " App_Data " dans le projet, puis à sélectionner un fichier dans Visual Studio " Copier dans le répertoire de résultat " dans " Toujours ".enter image description here

6
Toan Nguyen

Ouvrez votre publishpofile (* .pubxml) et incluez ce code dans l'élément "Project":

<ItemGroup>
    <Content Include="bin\yourDocumentationFile.xml">
        <CopyToOutputDirectory>true</CopyToOutputDirectory>
    </Content>
    <!-- Include a content to each documentation file -->
</ItemGroup>
4
Leandro Escaldelai

Si votre site utilise un profil de publication (par exemple, si vous en avez téléchargé un de votre fournisseur de services Internet), vous devez vous assurer que l'option suivante est définie sur False

<ExcludeApp_Data>False</ExcludeApp_Data>

Les propriétés du fichier XML peuvent être définies sur: Action de construction - Contenu, Copier dans le répertoire de sortie - Toujours

Mais si le paramètre ci-dessus est défini sur True dans le profil de publication, votre fichier XML ne sera jamais publié. J'ai appris ça à la dure.

0
Scott