Was sind die verschiedenen Einstellungen für "Build-Aktion" in den Visual Studio-Projekteigenschaften und was tun sie?

844

Zum größten Teil nehmen Sie einfach das, was Visual Studio für Sie als Standard festgelegt hat ... Ich beziehe mich auf die BuildAction- Eigenschaft für jede im Projektmappen- Explorer ausgewählte Datei. Es gibt eine Reihe von Optionen und es ist schwierig zu wissen, was jede von ihnen tun wird.

Gishu
quelle

Antworten:

1015
  • Keine : Die Datei ist nicht in der Projektausgabegruppe enthalten und wird beim Erstellungsprozess nicht kompiliert. Ein Beispiel ist eine Textdatei, die Dokumentation enthält, z. B. eine Readme-Datei.

  • Kompilieren : Die Datei wird in die Build-Ausgabe kompiliert. Diese Einstellung wird für Codedateien verwendet.

  • Inhalt : Ermöglicht das Abrufen einer Datei (im selben Verzeichnis wie die Assembly) als Stream über Application.GetContentStream (URI). Damit diese Methode funktioniert, ist ein benutzerdefiniertes AssemblyAssociatedContentFile-Attribut erforderlich, das Visual Studio freundlicherweise hinzufügt, wenn Sie eine Datei als "Inhalt" markieren.

  • Eingebettete Ressource : Betten Sie die Datei in eine exklusive Assemblymanifestressource ein.

  • Ressource (nur WPF) : Betten Sie die Datei in eine gemeinsam genutzte (von allen Dateien in der Assembly mit ähnlicher Einstellung) Assembly-Manifest-Ressource mit dem Namen AppName.g.resources ein.

  • Seite (nur WPF) : Wird zum Kompilieren einer xamlDatei verwendet baml. Das bamlwird dann mit der gleichen Technik eingebettet wie Resource(dh verfügbar als `AppName.g.resources)

  • ApplicationDefinition (nur WPF) : Markieren Sie die XAML / Klassendatei, die Ihre Anwendung definiert. Sie geben den CodeBehind mit x: Class = "Namespace.ClassName" an und legen das Startformular / die Startseite mit StartupUri = "Window1.xaml" fest.

  • SplashScreen (nur WPF) : Ein Bild, das als markiert markiert SplashScreen ist, wird automatisch angezeigt, wenn eine WPF-Anwendung geladen wird, und wird dann ausgeblendet

  • DesignData : Kompiliert XAML-Ansichtsmodelle, sodass Benutzersteuerelemente mit Beispieldaten in Visual Studio in der Vorschau angezeigt werden können (verwendet Mock-Typen).

  • DesignDataWithDesignTimeCreatableTypes : Kompiliert XAML-Ansichtsmodelle, sodass Benutzersteuerelemente mit Beispieldaten in Visual Studio in der Vorschau angezeigt werden können (verwendet tatsächliche Typen).

  • EntityDeploy : (Entity Framework) : Wird zum Bereitstellen der Entity Framework-Artefakte verwendet

  • CodeAnalysisDictionary : Eine XML-Datei mit einem benutzerdefinierten Wortwörterbuch für Rechtschreibregeln

Gishu
quelle
9
" DesignData " wird für "Mischbarkeit" verwendet, sodass Sie WPF-Markup-basierte Daten hinzufügen können, die bei Anwendung der richtigen Einstellungen zur Entwurfszeit angezeigt werden.
PGallagher
6
Beachten Sie auch, dass Inhalte bei Verwendung der Bereitstellung mit einem Klick eingeschlossen werden, jedoch nicht, wenn "Kopieren, wenn neuer" ausgewählt ist.
Dax Fohl
4
Was ist mit Fakes, CodeAnalysisDictionary und XamlAppRef?
Crono
1
@jxramos Diese Informationen werden in der Projektdatei gespeichert.
Tobias
18
Was ist mit AdditionalFiles? Ich sehe es in VS 2015, konnte aber keine Referenz dafür finden.
Ganzheitlicher Entwickler
111

Aus der Dokumentation:

Die BuildAction-Eigenschaft gibt an, was Visual Studio mit einer Datei macht, wenn ein Build ausgeführt wird. BuildAction kann einen von mehreren Werten haben:

Keine - Die Datei ist nicht in der Projektausgabegruppe enthalten und wird beim Erstellungsprozess nicht kompiliert. Ein Beispiel ist eine Textdatei, die Dokumentation enthält, z. B. eine Readme-Datei.

Kompilieren - Die Datei wird in die Build-Ausgabe kompiliert. Diese Einstellung wird für Codedateien verwendet.

Inhalt - Die Datei wird nicht kompiliert, sondern ist in der Ausgabegruppe Inhalt enthalten. Diese Einstellung ist beispielsweise der Standardwert für eine .htm- oder eine andere Art von Webdatei.

Eingebettete Ressource - Diese Datei ist als DLL oder ausführbare Datei in die Ausgabe des Hauptprojekts eingebettet. Es wird normalerweise für Ressourcendateien verwendet.

Paul Batum
quelle
1
Interessant! Ich habe VS2008 installiert. Ich frage mich, warum sie nicht in meiner Dokumentation enthalten sind.
Paul Batum
Was ist mit der PRI-Ressource?
Yawar
1
@PaulBatum Können Sie die Referenz für diese zitierte Definition einfügen?
Rajan Prasad
@ Raymond 232: Welche Definition zitiert?
Peter Mortensen
1
@PaulBatum: Ja, in der Tat wäre die Referenz nett. Die Antwort beginnt mit "Aus der Dokumentation", daher wäre ein Link zu dieser Dokumentation willkommen.
Marc
35

Seite - Nimmt die angegebene XAML-Datei und kompiliert sie in BAML und bettet diese Ausgabe in den verwalteten Ressourcenstrom für Ihre Assembly ein (insbesondere AssemblyName.g.resources). Wenn Sie die entsprechenden Attribute für das XAML-Stammelement in der haben Datei wird eine blah.g.cs-Datei erstellt, die eine Teilklasse des "Codebehind" für diese Seite enthält. Dies beinhaltet im Wesentlichen einen Aufruf des BAML-Goops, um die Datei in den Speicher zu rehydrieren und eine der Mitgliedsvariablen Ihrer Klasse auf die jetzt erstellten Elemente zu setzen (z. B. wenn Sie x: Name = "foo" auf ein Element setzen können Sie dies tun.foo.Background = Purple; oder ähnlich.

ApplicationDefinition - ähnlich wie Page, außer dass es weitergeht und den Einstiegspunkt für Ihre Anwendung definiert, der Ihr App-Objekt instanziiert, darauf ausgeführt wird, der dann den von der StartupUri-Eigenschaft festgelegten Typ instanziiert und Ihr Hauptfenster angibt .

Um klar zu sein, ist diese Frage in ihrer Ergebnismenge insgesamt unendlich. Jeder kann zusätzliche BuildActions definieren, indem er einfach eine MSBuild-Task erstellt. Wenn Sie im Verzeichnis% systemroot% \ Microsoft.net \ framework \ v {version} \ nachsehen und sich die Datei Microsoft.Common.targets ansehen, sollten Sie in der Lage sein, viele weitere zu entschlüsseln (z. B. mit VS Pro und höher). Es gibt eine "Schatten" -Aktion, mit der Sie private Accessoren generieren können, um beim Testen privater Klassen zu helfen.

Dominic Hopton
quelle
Ich hoffe, es macht Ihnen nichts aus, dass ich Teile Ihrer Antwort in Gishus Antwort kopiert habe, um eine vollständigere Referenzantwort zu erhalten.
Ian Boyd
32

VS2010 verfügt über eine Eigenschaft für 'Aktion erstellen' und auch für 'In Ausgabeverzeichnis kopieren'. Eine Aktion von 'Keine' wird also weiterhin in das Erstellungsverzeichnis kopiert, wenn die Kopiereigenschaft auf 'Bei Neuem kopieren' oder 'Immer kopieren' gesetzt ist.

Daher sollte eine Build-Aktion "Inhalt" reserviert werden, um den Inhalt anzugeben, auf den Sie über "Application.GetContentStream" zugreifen.

Ich habe die Einstellung 'Build Action' von 'None' und die Einstellung 'Copy to Output Direcotry' von 'Copy if Newer' für einige extern verknüpfte .config-Includes verwendet.

G.

Gerard ONeill
quelle
Danke dafür. Ich bin jedoch etwas verwirrt darüber, wie / wo ich das mache. Idealerweise möchte ich nur meinen "Upload" -Ordner "einschließen", und alle untergeordneten Dateien werden in die Veröffentlichung aufgenommen.
SamJolly
Dies gilt für die Eigenschaften eines einzelnen Elements im Objektexplorer, die auf der Registerkarte Eigenschaften angezeigt werden, wenn Sie ein Element auswählen oder mit der rechten Maustaste klicken und Eigenschaften auswählen. Ich denke, Sie müssen nur das vorhandene Element hinzufügen, wenn Sie mit der rechten Maustaste auf das Projekt klicken. Übrigens enthält die Schaltfläche zum Speichern vorhandener Elemente im Dialogfeld "Vorhandenes Element hinzufügen" ein Dropdown-Menü, mit dem Sie es als Link hinzufügen können. Möglicherweise müssen Sie die Elemente noch im Ordner hinzufügen.
Gerard ONeill
5

In VS2008 ist der Dokumenteintrag am nützlichsten:

Windows Presentation Foundation Erstellen einer WPF-Anwendung (WPF)

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

ApplicationDefinition Identifiziert die XAML-Markup-Datei, die die Anwendungsdefinition enthält (eine XAML-Markup-Datei, deren Stammelement Application ist). ApplicationDefinition ist obligatorisch, wenn Install true und OutputType winexe ist. Eine WPF-Anwendung und folglich ein MSBuild-Projekt können nur eine ApplicationDefinition haben.

Seite Identifiziert eine XAML-Markup-Datei, deren Inhalt in ein Binärformat konvertiert und in eine Assembly kompiliert wird. Seitenelemente werden normalerweise in Verbindung mit einer CodeBehind-Klasse implementiert.

Die am häufigsten verwendeten Seitenelemente sind XAML-Dateien, deren Elemente der obersten Ebene eines der folgenden sind:

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 Identifiziert eine Ressourcendatei, die zu einer Anwendungsassembly kompiliert wird. Wie bereits erwähnt, verarbeitet UICulture Ressourcenelemente.

Inhalt Identifiziert eine Inhaltsdatei, die mit einer Anwendung verteilt wird. Metadaten, die die Inhaltsdatei beschreiben, werden in die Anwendung kompiliert (mithilfe von AssemblyAssociatedContentFileAttribute).

James Moore
quelle
4

Wie wäre es mit dieser Seite von Microsoft Connect (Erläuterung der Typen DesignData und DesignDataWithDesignTimeCreatableTypes). Zitat:

Im Folgenden werden die beiden Erstellungsaktionen für Beispieldatendateien beschrieben.

Beispieldaten .xaml-Dateien müssen einer der folgenden Build-Aktionen zugewiesen werden:

DesignData : Beispieldatentypen werden als Faux-Typen erstellt. Verwenden Sie diese Erstellungsaktion, wenn die Beispieldatentypen nicht erstellt werden können oder schreibgeschützte Eigenschaften haben, für die Sie Beispieldatenwerte definieren möchten.

DesignDataWithDesignTimeCreatableTypes : Beispieldatentypen werden mit den in der Beispieldatendatei definierten Typen erstellt. Verwenden Sie diese Erstellungsaktion, wenn die Beispieldatentypen mit ihrem leeren Standardkonstruktor erstellt werden können.

Nicht so unglaublich erschöpfend, aber es gibt zumindest einen Hinweis. Diese MSDN-exemplarische Vorgehensweise enthält auch einige Ideen. Ich weiß nicht, ob diese Build-Aktionen auch für Nicht-Silverlight-Projekte gelten.

Per Lundberg
quelle
4
  • Fälschungen: Teil des Microsoft Fakes-Frameworks (Unit Test Isolation). Nicht in allen Visual Studio-Versionen verfügbar. Mit Fälschungen werden Unit-Tests in Ihrem Projekt unterstützt, sodass Sie den zu testenden Code isolieren können, indem Sie andere Teile der Anwendung durch Stubs oder Shims ersetzen. Mehr hier: https://msdn.microsoft.com/en-us/library/hh549175.aspx
Jorge Garcia
quelle