Quali sono le varie impostazioni di "Build action" nelle proprietà del progetto Visual Studio e cosa fanno?


844

Per la maggior parte, prendi qualsiasi cosa Visual Studio lo imposti come predefinito ... Mi riferisco alla proprietà BuildAction per ogni file selezionato in Esplora soluzioni. Esistono diverse opzioni ed è difficile sapere cosa farà ciascuna di esse.

Risposte:


1015
  • Nessuna : il file non è incluso nel gruppo di output del progetto e non viene compilato nel processo di compilazione. Un esempio è un file di testo che contiene documentazione, ad esempio un file Leggimi.

  • Compila : il file viene compilato nell'output di compilazione. Questa impostazione viene utilizzata per i file di codice.

  • Contenuto : consente di recuperare un file (nella stessa directory dell'assembly) come flusso tramite Application.GetContentStream (URI). Perché questo metodo funzioni, è necessario un attributo personalizzato AssemblyAssociatedContentFile che Visual Studio aggiunge gentilmente quando si contrassegna un file come "Contenuto"

  • Risorsa incorporata : incorpora il file in una risorsa manifest dell'assembly esclusiva.

  • Risorsa (solo WPF) : incorpora il file in una risorsa manifest dell'assembly condivisa (da tutti i file nell'assieme con impostazioni simili) denominata AppName.g.resources.

  • Pagina (solo WPF) : utilizzata per compilare un xamlfile baml. Il bamlviene poi integrato con la stessa tecnica Resource(cioè disponibile come `AppName.g.resources)

  • ApplicationDefinition (solo WPF) : contrassegnare il file XAML / class che definisce l'applicazione. Specificare code-behind con x: Class = "Namespace.ClassName" e impostare il modulo / pagina di avvio con StartupUri = "Window1.xaml"

  • SplashScreen (solo WPF) : un'immagine contrassegnata come SplashScreen viene mostrata automaticamente quando viene caricata un'applicazione WPF, quindi sfuma

  • DesignData : compila i modelli di vista XAML in modo che i controlli utente possano essere visualizzati in anteprima con i dati di esempio in Visual Studio (utilizza tipi simulati)

  • DesignDataWithDesignTimeCreatableTypes : compila i modelli di vista XAML in modo che i controlli utente possano essere visualizzati in anteprima con i dati di esempio in Visual Studio (utilizza tipi effettivi)

  • EntityDeploy : (Entity Framework) : utilizzato per distribuire gli artefatti Entity Framework

  • CodeAnalysisDictionary : un file XML contenente un dizionario di parole personalizzato per le regole di ortografia


9
" DesignData " viene utilizzato per "Miscelabilità", che consente di aggiungere dati basati sul markup WPF, ovvero quando vengono applicate le impostazioni corrette, quindi visualizzate in fase di progettazione.
PGallagher,

6
Si noti inoltre che il contenuto verrà incluso quando si utilizza la distribuzione con un clic, ma Nessuno non verrà nemmeno se è selezionato "copia se più recente".
Dax Fohl,

4
Che dire di Fakes, CodeAnalysisDictionary e XamlAppRef?
Crono,

1
@jxramos Queste informazioni vengono salvate nel file di progetto.
Tobias,

18
Che dire AdditionalFiles? Lo vedo in VS 2015 ma non sono riuscito a trovare un riferimento per questo.
Sviluppatore olistico

111

Dalla documentazione:

La proprietà BuildAction indica cosa fa Visual Studio con un file quando viene eseguita una build. BuildAction può avere uno di diversi valori:

Nessuno: il file non è incluso nel gruppo di output del progetto e non viene compilato nel processo di generazione. Un esempio è un file di testo che contiene documentazione, ad esempio un file Leggimi.

Compila: il file viene compilato nell'output di compilazione. Questa impostazione viene utilizzata per i file di codice.

Contenuto: il file non è stato compilato, ma è incluso nel gruppo di output del contenuto. Ad esempio, questa impostazione è il valore predefinito per un .htm o un altro tipo di file Web.

Risorsa incorporata: questo file è incorporato nell'output di compilazione del progetto principale come DLL o file eseguibile. In genere viene utilizzato per i file di risorse.


1
Interessante! Ho installato VS2008, mi chiedo perché non siano comparsi nella mia documentazione?
Paul Batum,

Che dire della risorsa PRI?
Yawar,

1
@PaulBatum puoi inserire il riferimento per questa definizione citata?
Rajan Prasad,

@ Raymond 232: quale definizione citata?
Peter Mortensen,

1
@PaulBatum: Sì, in effetti il ​​riferimento sarebbe carino. La risposta inizia con "Dalla documentazione", quindi sarebbe gradito un collegamento a questa documentazione.
Marc,

35

Pagina: accetta il file XAML specificato e lo compila in BAML e incorpora l'output nel flusso di risorse gestite per il proprio assembly (in particolare AssemblyName.g.resources), inoltre, se si dispone degli attributi appropriati sull'elemento XAML radice nell'elemento file, creerà un file blah.g.cs, che conterrà una classe parziale del "codebehind" per quella pagina; questo in pratica implica una chiamata al goop BAML per reidratare il file in memoria e per impostare una delle variabili membro della tua classe sugli elementi ora creati (ad es. se metti x: Name = "pippo" su un elemento , sarai in grado di eseguire this.foo.Background = Purple; o simile.

ApplicationDefinition: simile a Page, tranne per il fatto che va avanti ulteriormente e definisce il punto di ingresso per l'applicazione che crea un'istanza dell'oggetto app, chiama in esecuzione su di esso, che quindi crea un'istanza del tipo impostato dalla proprietà StartupUri e fornisce la finestra principale .

Inoltre, per essere chiari, questa domanda nel complesso è infinata nella sua serie di risultati; chiunque può definire BuildActions aggiuntive semplicemente creando un'attività MSBuild. Se guardi nella directory% systemroot% \ Microsoft.net \ framework \ v {versione} \ e guardi il file Microsoft.Common.targets, dovresti essere in grado di decifrarne molti altri (ad esempio, con VS Pro e versioni successive, c'è un'azione "Ombra" che ti consente di generare accessi privati ​​per aiutarti a testare le classi private.


spero che non ti dispiaccia che ho copiato parti della tua risposta nella risposta di Gishu, al fine di ottenere una risposta di riferimento più completa.
Ian Boyd,

32

VS2010 ha una proprietà per "Build Action" e anche per "Copia nella directory di output". Quindi un'azione di "Nessuno" verrà comunque copiata nella directory di build se la proprietà copy è impostata su "Copia se più recente" o "Copia sempre".

Quindi un'azione di costruzione di "Contenuto" dovrebbe essere riservata per indicare il contenuto a cui si accederà tramite "Application.GetContentStream"

Ho usato l'impostazione 'Build Action' di 'None' e l'impostazione 'Copia in Direcotry di output' di 'Copia se più recente' per alcuni .config collegati esternamente.

G.


Grazie per questo. Tuttavia, sono un po 'confuso su come / dove lo faccio. Idealmente, vorrei solo "includere" la mia cartella "Upload" e tutti i file secondari verranno inclusi nella pubblicazione.
SamJolly,

Questo vale per le proprietà di un singolo elemento in Esplora oggetti, che vedrai nella scheda Proprietà quando selezioni un elemento o fai clic con il pulsante destro del mouse e selezioni le proprietà. Per quello che vuoi, penso che devi solo aggiungere un oggetto esistente quando fai clic con il tasto destro del mouse sul progetto. A proposito, il pulsante di salvataggio della finestra di dialogo Aggiungi elemento esistente presenta un menu a discesa che consente di aggiungerlo come collegamento. Potrebbe essere necessario aggiungere gli elementi all'interno della cartella.
Gerard ONeill

5

In VS2008, la voce doc che sembra la più utile è:

Windows Presentation Foundation Creazione di un'applicazione WPF (WPF)

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

ApplicationDefinition Identifica il file di markup XAML che contiene la definizione dell'applicazione (un file di markup XAML il cui elemento radice è Application). ApplicationDefinition è obbligatoria quando Install è true e OutputType è winexe. Un'applicazione WPF e, di conseguenza, un progetto MSBuild può avere solo una definizione dell'applicazione.

Pagina Identifica un file di markup XAML il cui contenuto viene convertito in un formato binario e compilato in un assembly. Gli elementi della pagina vengono generalmente implementati insieme a una classe code-behind.

Gli elementi Page più comuni sono i file XAML i cui elementi di livello superiore sono uno dei seguenti:

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

Risorsa Identifica un file di risorse che viene compilato in un assembly dell'applicazione. Come accennato in precedenza, UICulture elabora le risorse.

Contenuto Identifica un file di contenuto distribuito con un'applicazione. I metadati che descrivono il file di contenuto vengono compilati nell'applicazione (usando AssemblyAssociatedContentFileAttribute).


4

Che ne dici di questa pagina da Microsoft Connect (che spiega i tipi DesignData e DesignDataWithDesignTimeCreatableTypes). citando:

Di seguito vengono descritte le due azioni di compilazione per i file di dati di esempio.

I file .xaml di dati di esempio devono essere assegnati a una delle seguenti azioni di costruzione:

DesignData : i tipi di dati di esempio verranno creati come tipi di faux. Utilizzare questa azione di creazione quando i tipi di dati di esempio non sono creabili o hanno proprietà di sola lettura per le quali si desidera definire valori di dati di esempio.

DesignDataWithDesignTimeCreatableTypes : i tipi di dati di esempio verranno creati utilizzando i tipi definiti nel file di dati di esempio. Utilizzare questa azione di generazione quando i tipi di dati di esempio sono creabili utilizzando il costruttore vuoto predefinito.

Non così incredibilmente esaustivo, ma almeno dà un suggerimento. Questa procedura dettagliata di MSDN fornisce anche alcune idee. Non so se queste azioni di costruzione siano applicabili anche a progetti non Silverlight.


4
  • Fakes: parte del framework Microsoft Fakes (Unit Test Isolation). Non disponibile su tutte le versioni di Visual Studio. I falsi vengono utilizzati per supportare i test unitari nel progetto, aiutandoti a isolare il codice che stai testando sostituendo altre parti dell'applicazione con stub o shim. Altro qui: https://msdn.microsoft.com/en-us/library/hh549175.aspx
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.