Quels sont les différents paramètres «Build action» dans les propriétés du projet Visual Studio et que font-ils?


844

Pour la plupart, vous prenez tout ce que Visual Studio le définit par défaut ... Je fais référence à la propriété BuildAction pour chaque fichier sélectionné dans l'Explorateur de solutions. Il existe un certain nombre d'options et il est difficile de savoir ce que chacune d'elles fera.

Réponses:


1015
  • 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 Lisezmoi.

  • Compiler : le fichier est compilé dans la sortie de génération. Ce paramètre est utilisé pour les fichiers de code.

  • Contenu : vous permet de récupérer un fichier (dans le même répertoire que l'assembly) en tant que flux via Application.GetContentStream (URI). Pour que cette méthode fonctionne, elle a besoin d'un attribut personnalisé AssemblyAssociatedContentFile que Visual Studio ajoute gracieusement lorsque vous marquez un fichier comme "Contenu"

  • Ressource intégrée : incorpore le fichier dans une ressource de manifeste d'assembly exclusif.

  • Ressource (WPF uniquement) : incorpore le fichier dans une ressource de manifeste d'assembly partagée (par tous les fichiers de l'assembly avec un paramètre similaire) nommée AppName.g.resources.

  • Page (WPF uniquement) : utilisé pour compiler un xamlfichier dans baml. Le bamlest ensuite intégré avec la même technique que Resource(c'est-à-dire disponible en tant que `AppName.g.resources)

  • ApplicationDefinition (WPF uniquement) : marquez le fichier XAML / classe qui définit votre application. Vous spécifiez le code-behind avec le x: Class = "Namespace.ClassName" et définissez le formulaire / page de démarrage avec StartupUri = "Window1.xaml"

  • SplashScreen (WPF uniquement) : une image marquée comme SplashScreen s'affiche automatiquement lors du chargement d'une application WPF, puis s'estompe

  • DesignData : compile les modèles de vue XAML afin que les contrôles utilisateur puissent être prévisualisés avec des exemples de données dans Visual Studio (utilise des types fictifs)

  • DesignDataWithDesignTimeCreatableTypes : compile les modèles de vue XAML afin que les contrôles utilisateur puissent être prévisualisés avec des exemples de données dans Visual Studio (utilise des types réels)

  • EntityDeploy : (Entity Framework) : utilisé pour déployer les artefacts Entity Framework

  • CodeAnalysisDictionary : un fichier XML contenant un dictionnaire de mots personnalisé pour les règles d'orthographe


9
" DesignData " est utilisé pour "Blendability", vous permettant d'ajouter des données basées sur le balisage WPF, qui sont, lorsque les paramètres corrects sont appliqués, puis affichées au moment du design.
PGallagher

6
Notez également que le contenu sera inclus lors de l'utilisation du déploiement en un clic, mais aucun ne le sera même si "copier si plus récent" est sélectionné.
Dax Fohl

4
Qu'en est-il des contrefaçons, de CodeAnalysisDictionary et de XamlAppRef?
Crono

1
@jxramos Ces informations sont enregistrées dans le fichier de projet.
Tobias

18
Et alors AdditionalFiles? Je le vois dans VS 2015 mais je n'ai pas trouvé de référence pour cela.
Développeur holistique

111

De la documentation:

La propriété BuildAction indique ce que Visual Studio fait avec un fichier lorsqu'une génération est exécutée. BuildAction peut avoir l'une des valeurs suivantes:

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 Lisezmoi.

Compiler - Le fichier est compilé dans la sortie de génération. 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 incorporée - Ce fichier est incorporé dans la sortie principale de la construction du projet en tant que DLL ou exécutable. Il est généralement utilisé pour les fichiers de ressources.


1
Intéressant! J'ai VS2008 installé, je me demande pourquoi ils n'apparaissent pas dans ma documentation?
Paul Batum

Qu'en est-il de la ressource PRI?
Yawar

1
@PaulBatum pouvez-vous insérer la référence pour cette définition citée?
Rajan Prasad

@Raymond 232: Quelle définition citée?
Peter Mortensen

1
@PaulBatum: Oui, en effet, la référence serait bien. La réponse commence par "De la documentation" donc un lien vers cette documentation serait apprécié.
Marc

35

Page - Prend le fichier XAML spécifié, compile en BAML et incorpore la sortie dans le flux de ressources gérées pour votre assembly (spécifiquement AssemblyName.g.resources). De plus, si vous disposez des attributs appropriés sur l'élément XAML racine dans l'élément fichier, il créera un fichier blah.g.cs, qui contiendra une classe partielle du "codebehind" pour cette page; cela implique essentiellement un appel au goop BAML pour réhydrater le fichier en mémoire et pour définir l'une des variables membres de votre classe sur les éléments maintenant créés (par exemple, si vous mettez x: Name = "foo" sur un élément , vous pourrez faire this.foo.Background = Purple; ou similaire.

ApplicationDefinition - similaire à Page, sauf qu'il continue sur furthur et définit le point d'entrée de votre application qui instanciera votre objet d'application, appellera run dessus, qui instanciera ensuite le type défini par la propriété StartupUri et donnera votre fenêtre principale .

De plus, pour être clair, cette question dans son ensemble est infinie dans son ensemble de résultats; n'importe qui peut définir des BuildActions supplémentaires simplement en créant une tâche MSBuild. Si vous regardez dans le répertoire% systemroot% \ Microsoft.net \ framework \ v {version} \ et regardez le fichier Microsoft.Common.targets, vous devriez pouvoir en déchiffrer beaucoup plus (par exemple, avec VS Pro et au-dessus, il existe une action "Shadow" qui vous permet de générer des accesseurs privés pour vous aider à tester les classes privées.


j'espère que cela ne vous dérange pas que j'ai copié des parties de votre réponse dans la réponse de Gishu, afin d'obtenir une réponse de référence plus complète.
Ian Boyd

32

VS2010 a une propriété pour 'Build Action', et aussi pour 'Copy to Output Directory'. Ainsi, une action de «Aucun» sera toujours copiée dans le répertoire de construction si la propriété de copie est définie sur «Copier si plus récent» ou «Copier toujours».

Ainsi, une action de construction de «Contenu» doit être réservée pour indiquer le contenu auquel vous accéderez via «Application.GetContentStream»

J'ai utilisé le paramètre «Build Action» de «None» et le paramètre «Copy to Output Direcotry» de «Copy if Newer» pour certains fichiers .config liés en externe.

G.


Merci pour cela. Cependant, je suis un peu confus quant à comment / où je fais cela. Idéalement, je voudrais simplement "inclure" mon dossier "Télécharger", et tous les fichiers enfants seront inclus dans la publication.
SamJolly

Cela s'applique aux propriétés d'un élément individuel dans l'explorateur d'objets, que vous verrez dans l'onglet Propriétés lorsque vous sélectionnez un élément ou cliquez avec le bouton droit et sélectionnez les propriétés. Pour ce que vous voulez, je pense que vous n'avez qu'à ajouter un élément existant lorsque vous cliquez avec le bouton droit sur le projet. BTW, le bouton Enregistrer de la boîte de dialogue Ajouter un élément existant possède une liste déroulante qui vous permet de l'ajouter en tant que lien. Vous devrez peut-être encore ajouter les éléments dans le dossier.
Gerard ONeill

5

Dans VS2008, l'entrée doc qui semble la plus utile est:

Windows Presentation Foundation Création d'une application WPF (WPF)

ms-help: //MS.VSCC.v90/MS.MSDNQTR.v90.fr/wpf_conceptual/html/a58696fd-bdad-4b55-9759-136dfdf8b91c.htm

ApplicationDefinition Identifie le fichier de balisage XAML qui contient la définition d'application (un fichier de balisage XAML dont l'élément racine est Application). ApplicationDefinition est obligatoire lorsque Install est vrai et OutputType est winexe. Une application WPF et, par conséquent, un projet MSBuild ne peuvent avoir qu'une seule ApplicationDefinition.

Page Identifie un fichier de balisage XAML dont le contenu est converti au format binaire et compilé dans un assembly. Les éléments de page sont généralement implémentés en conjonction avec une classe code-behind.

Les éléments de page les plus courants sont les fichiers XAML dont les éléments de niveau supérieur sont l'un des suivants:

Window (System.Windows..::.Window).

Page (System.Windows.Controls..::.Page).

PageFunction (System.Windows.Navigation..::.PageFunction<(Of <(T>)>)).

ResourceDictionary (System.Windows..::.ResourceDictionary).

FlowDocument (System.Windows.Documents..::.FlowDocument).

UserControl (System.Windows.Controls..::.UserControl).

Ressource Identifie un fichier de ressources qui est compilé dans un assembly d'application. Comme mentionné précédemment, UICulture traite les éléments de ressource.

Contenu Identifie un fichier de contenu distribué avec une application. Les métadonnées qui décrivent le fichier de contenu sont compilées dans l'application (à l'aide de AssemblyAssociatedContentFileAttribute).


4

Que diriez-vous de cette page de Microsoft Connect (expliquant les types DesignData et DesignDataWithDesignTimeCreatableTypes). Citant:

Ce qui suit décrit les deux actions de génération pour les exemples de fichiers de données.

Les exemples de fichiers .xaml de données doivent être affectés à l'une des actions de génération ci-dessous:

DesignData : des exemples de types de données seront créés en tant que faux types. Utilisez cette action de génération lorsque les exemples de types de données ne peuvent pas être créés ou ont des propriétés en lecture seule pour lesquelles vous souhaitez définir des exemples de valeurs de données.

DesignDataWithDesignTimeCreatableTypes : des exemples de types de données seront créés à l'aide des types définis dans l'exemple de fichier de données. Utilisez cette action de génération lorsque les exemples de types de données peuvent être créés à l'aide de leur constructeur vide par défaut.

Pas si incroyablement exhaustif, mais cela donne au moins un indice. Cette procédure pas à pas MSDN donne également quelques idées. Je ne sais pas si ces actions de génération s'appliquent également aux projets non Silverlight.


4
  • Fakes: partie du framework Microsoft Fakes (Unit Test Isolation). Non disponible sur toutes les versions de Visual Studio. Les contrefaçons sont utilisées pour prendre en charge les tests unitaires dans votre projet, vous aidant à isoler le code que vous testez en remplaçant d'autres parties de l'application par des talons ou des cales. Plus ici: https://msdn.microsoft.com/en-us/library/hh549175.aspx
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.