Quali sono le varie impostazioni “Crea azione” nelle proprietà del progetto Visual Studio e cosa fanno?

Per la maggior parte, prendi semplicemente tutto ciò che Visual Studio imposta per te come predefinito … Mi riferisco alla proprietà BuildAction per ogni file selezionato in Solution Explorer. Ci sono un certo numero di opzioni ed è difficile sapere cosa faranno ognuna di esse.

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

  • Compile : il file è compilato nell’output di build. Questa impostazione è utilizzata per i file di codice.

  • Contenuto : consente di recuperare un file (nella stessa directory dell’assieme) come stream tramite Application.GetContentStream (URI). Affinché questo metodo funzioni, è necessario un attributo personalizzato AssemblyAssociatedContentFile che Visual Studio aggiunge gentilmente quando contrassegni un file come “Contenuto”

  • Risorsa incorporata : incorpora il file in una risorsa manifest di assemblaggio esclusivo.

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

  • Pagina (solo WPF) : utilizzata per compilare un file baml in baml . Il baml viene quindi incorporato con la stessa tecnica di Resource (cioè disponibile come `AppName.g.resources)

  • ApplicationDefinition (solo WPF) : Contrassegna il file XAML / class che definisce la tua applicazione. Si specifica il code-behind con x: Class = “Namespace.ClassName” e si imposta il form / page di avvio con StartupUri = “Window1.xaml”

  • SplashScreen (solo WPF) : un’immagine che viene contrassegnata come SplashScreen viene visualizzata automaticamente quando viene caricata un’applicazione WPF, quindi viene visualizzata una dissolvenza

  • DesignData : compila i modelli di visualizzazione XAML in modo che gli usercontrols possano essere visualizzati in anteprima con dati di esempio in Visual Studio (utilizza i tipi fittizi)

  • DesignDataWithDesignTimeCreatableTypes : compila i modelli di visualizzazione XAML in modo che gli usercontrols possano essere visualizzati in anteprima con dati di esempio in Visual Studio (utilizza i tipi reali)

  • EntityDeploy : (Entity Framework) : utilizzato per distribuire le risorse di Entity Framework

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

Dalla documentazione:

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

Nessuno – Il file non è incluso nel gruppo di output del progetto e non è compilato nel processo di compilazione. Un esempio è un file di testo che contiene documentazione, come un file Leggimi.

Compile: il file è compilato nell’output di build. Questa impostazione è utilizzata per i file di codice.

Contenuto: il file non è compilato, ma è incluso nel gruppo di output Content. 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 generazione del progetto principale come DLL o eseguibile. Viene in genere utilizzato per i file di risorse.

Pagina – Prende il file XAML specificato e compila in BAML e incorpora tale output nel stream di risorse gestite per l’assembly (in particolare AssemblyName.g.resources), Inoltre, se si dispone degli attributi appropriati sull’elemento XAML radice nel file, creerà un file blah.g.cs, che conterrà una class parziale del “codebehind” per quella pagina; questo in pratica implica una chiamata al BAML goop per reidratare il file in memoria e per impostare qualsiasi variabile membro della class sugli elementi ora creati (ad esempio, se si inserisce x: Name = “foo” su un elemento , sarai in grado di fare questo.foo.Background = Viola o simile.

ApplicationDefinition – simile a Page, eccetto che va suestep furthur, e definisce il punto di ingresso per la tua applicazione che istanzia il tuo object app, chiama su di esso, che quindi istanzia il tipo impostato dalla proprietà StartupUri, e darà la tua finestra principale .

Inoltre, per essere chiari, questa domanda generale è infinata nel suo insieme di risultati; chiunque può definire BuildAction aggiuntive semplicemente creando un’attività MSBuild. Se si guarda nella directory% systemroot% \ Microsoft.net \ framework \ v {version} \ e si guarda il file Microsoft.Common.targets, si dovrebbe essere in grado di decifrare molti altri (ad esempio, con VS Pro e versioni successive, esiste un’azione “Ombra” che consente di generare accessor privati ​​per aiutare l’unità a testare le classi private.

VS2010 ha una proprietà per ‘Build Action’, e anche per ‘Copy to Output Directory’. Pertanto, un’azione di “Nessuno” continuerà a copiare nella directory di compilazione se la proprietà di copia è impostata su “Copia se più recente” o “Copia sempre”.

Pertanto, è necessario riservare un’azione di creazione di “Contenuto” per indicare il contenuto a cui si accede tramite “Application.GetContentStream”

Ho usato l’impostazione ‘Build Action’ di ‘None’ e l’impostazione ‘Copy to Output Direcotry’ di ‘Copy if Newer’ per alcuni file .config collegati esternamente.

G.

In VS2008, la voce del documento 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 principale è Application). ApplicationDefinition è obbligatorio quando Install è true e OutputType è winexe. Un’applicazione WPF e, di conseguenza, un progetto MSBuild possono avere solo una ApplicationDefinition.

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 in genere implementati in combinazione con una class code-behind.

Gli elementi di pagina più comuni sono 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 sono compilati nell’applicazione (usando AssemblyAssociatedContentFileAttribute).

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

Quanto segue descrive le due azioni di compilazione per i file di dati di esempio.

Dati di esempio. I file .xaml devono essere assegnati a una delle seguenti azioni di creazione:

DesignData : i tipi di dati di esempio verranno creati come tipi di faux. Utilizzare questa azione build quando i tipi di dati di esempio non sono creabili o hanno proprietà di sola lettura per cui 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 build quando i tipi di dati di esempio sono creabili utilizzando il costruttore vuoto predefinito.

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

  • Fake: parte del framework Microsoft Fakes (Unit Test Isolation). Non disponibile su tutte le versioni di Visual Studio. I falsi vengono utilizzati per supportare il test delle unità nel progetto, aiutandoti a isolare il codice che stai testando sostituendo altre parti dell’applicazione con stub o shim. Maggiori informazioni qui: https://msdn.microsoft.com/en-us/library/hh549175.aspx