Réponses:
L'article MSDN sur la propriété d' action de génération explique les différences.
Aucun - Le fichier n'est pas inclus dans le groupe de sortie du projet et n'est pas compilé dans le processus de génération. Un exemple est un fichier texte contenant de la documentation, tel qu'un fichier Lisez-moi.
Contenu - Le fichier n'est pas compilé, mais est inclus dans le groupe de sortie Contenu. Par exemple, ce paramètre est la valeur par défaut d'un fichier .htm ou d'un autre type de fichier Web.
Une différence est la façon dont ils sont publiés; Les éléments "Aucun" ne sont pas inclus dans une publication, les éléments "Contenu" le font; par exemple, dans la boîte de dialogue "Fichiers d'application" de l'onglet Publier.
CopyToOutputDirectory
ensemble, true
il sera publié dans undotnet publish
Je ne suis pas sûr à 100% (j'ai lu la description MSDN de la propriété Build Action ) mais le simple fait de copier cette réponse de MSDN vers StackOverflow ne répond pas complètement à la question pour moi.
La différence entre Aucun et Contenu n'a d'effet que sur les projets Web. Pour un projet en ligne de commande, un projet WinForm ou un projet UnitTest (dans mon cas), etc. Aucun et Contenu n'ont pas de comportement différent.
MSDN: "groupe de sortie de projet" ou "groupe de sortie de contenu" uniquement les termes utilisés dans un projet Web, non?
None
vs Content
n'a d'effet que pour l' étape de publication et non pour l' étape de construction . Car l'étape de construction semble CopyToOutputDirectory
pouvoir être définie sur l'un ou l'autre et cela contrôle si le fichier est copié par l'étape de construction. Il semble également étrange que, par défaut, les modèles T4 soient ajoutés en tant Content
qu'éléments et non en tant None
qu'éléments.
Dans ma situation, mon fichier MSBuild avait un ItemGroup
pour les ressources image qui se présentait comme suit:
<ItemGroup>
<Content Include="Resources\image001.png" />
<Content Include="Resources\image002.png" />
<Content Include="Resources\image003.png" />
<Content Include="Resources\image004.png" />
<None Include="Resources\image005.png" />
<None Include="Resources\image006.png" />
<None Include="Resources\image007.png" />
</ItemGroup>
Pendant que mon projet se construisait correctement, je me demandais pourquoi j'avais un mélange d' éléments Content
et de None
type d'élément dans mon ItemGroup
. Cet article MSDN (pour Visual Studio 2010) m'a donné les conseils que je recherchais:
Notez que lorsque l'éditeur de ressources ajoute une image, il définit l' action de génération sur Aucune , car le fichier .resx fait référence au fichier image. Au moment de la construction, l'image est extraite dans le fichier .resources créé à partir du fichier .resx. L'image est alors facilement accessible via la classe fortement typée générée automatiquement pour le fichier .resx. Par conséquent, vous ne devez pas modifier ce paramètre en Ressource intégrée , car cela inclurait l'image deux fois dans l'assembly.
Résolution: Avec ces conseils, à l'aide d'un éditeur de texte, j'ai changé les Content
éléments de type d'élément en None
.
En outre, pour une vue d'ensemble des éléments MSBuild, consultez cet article MSDN .
J'ai un projet qui ne contient aucun élément compilable (il stocke du html et du javascript pour les tests unitaires de jasmin).
Un jour ma solution (qui contenait ledit projet) a cessé de se compiler en disant "La cible" Build "n'existe pas dans le projet".
J'ai ajouté une importation pour introduire le compilateur, qui a bien fonctionné sur ma machine mais a échoué en utilisant msbuild sur le serveur de construction.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
J'ai ensuite changé une ligne de
<None Include="SpecRunner.html" />
à
<Content Include="SpecRunner.html" />
et cela a également fonctionné sur le serveur de construction.
Vous avez besoin de None dans un fichier de projet modèle pour inclure les fichiers que vous définissez dans le .vstemplate, sinon ils sont perdus dans le processus de création et de traduction. Ils sont laissés dans le dossier temporaire qu'il utilise pour tout construire, puis supprimés peu de temps après.
Dans mon cas .Pubxml est l'un de ces fichiers parmi la liste Aucun . Il n'est pas destiné à la création de solutions ou en tant que fichier statique pour un projet Web. Mais pour publier le site sur Azure, les configurations sont présentes ici.
Selon l'article de Microsoft, voici les principaux types que nous voyons parmi les balises de fichier .csproj :
Aucun - Le fichier n'est pas inclus dans le groupe de sortie du projet et n'est pas compilé dans le processus de génération. Un exemple est un fichier texte contenant de la documentation, tel qu'un fichier Lisez-moi.
Compile - Le fichier est compilé dans la sortie de construction. Ce paramètre est utilisé pour les fichiers de code.
Contenu - Le fichier n'est pas compilé, mais est inclus dans le groupe de sortie Contenu. Par exemple, ce paramètre est la valeur par défaut d'un fichier .htm ou d'un autre type de fichier Web.
Ressource intégrée - Ce fichier est intégré dans la sortie de construction du projet principal en tant que DLL ou exécutable. Il est généralement utilisé pour les fichiers de ressources.
Les fichiers de contenu ne sont pas inclus dans une version, mais sont inclus dans une publication.
Aucun fichier n'est inclus dans une compilation ou une publication, sauf s'il est configuré de cette façon par vous. Par exemple, un paramètre «Copier dans le répertoire de sortie» sur «Toujours» ou «Plus récent» les fera être inclus à la fois dans une construction et une publication.
Content
s à changer enNone
s. Je pense que cela s'est produit lorsque j'ai renommé des fichiers de .ascx en .cshtml lors de la conversion en Razor. Les changer manuellement a corrigé certains problèmes de déploiement que j'avais. Heureux d'avoir trouvé ça.