¿Cuáles son las diversas configuraciones de "Acción de compilación" en las propiedades del proyecto de Visual Studio y qué hacen?

844

En su mayor parte, solo toma lo que Visual Studio lo configura como predeterminado ... Me refiero a la propiedad BuildAction para cada archivo seleccionado en el Explorador de soluciones. Hay varias opciones y es difícil saber qué hará cada una de ellas.

Gishu
fuente

Respuestas:

1015
  • Ninguno : el archivo no se incluye en el grupo de salida del proyecto y no se compila en el proceso de compilación. Un ejemplo es un archivo de texto que contiene documentación, como un archivo Léame.

  • Compilar : el archivo se compila en la salida de compilación. Esta configuración se usa para archivos de código.

  • Contenido : le permite recuperar un archivo (en el mismo directorio que el ensamblado) como una secuencia a través de Application.GetContentStream (URI). Para que este método funcione, necesita un atributo personalizado AssemblyAssociatedContentFile que Visual Studio agrega gentilmente cuando marca un archivo como "Contenido"

  • Recurso incrustado: incrusta el archivo en un recurso de manifiesto de ensamblaje exclusivo.

  • Recurso (solo WPF) : incrusta el archivo en un recurso de manifiesto de ensamblaje compartido (por todos los archivos en el ensamblado con una configuración similar) denominado AppName.g.resources.

  • Página (solo WPF) : se utiliza para compilar un xamlarchivo baml. La bamlcontinuación, se encaja con la misma técnica que Resource(es decir, disponible como `AppName.g.resources)

  • ApplicationDefinition (solo WPF) : marque el archivo XAML / class que define su aplicación. Usted especifica el código subyacente con x: Class = "Namespace.ClassName" y establece el formulario / página de inicio con StartupUri = "Window1.xaml"

  • SplashScreen (solo WPF) : una imagen que se marca como SplashScreen se muestra automáticamente cuando se carga una aplicación WPF y luego se desvanece

  • DesignData : compila modelos de vista XAML para que los controles de usuario se puedan previsualizar con datos de muestra en Visual Studio (utiliza tipos simulados)

  • DesignDataWithDesignTimeCreatableTypes : compila modelos de vista XAML para que los controles de usuario puedan previsualizarse con datos de muestra en Visual Studio (utiliza tipos reales)

  • EntityDeploy : (Entity Framework) : utilizado para implementar los artefactos de Entity Framework

  • CodeAnalysisDictionary : un archivo XML que contiene un diccionario de palabras personalizado para reglas de ortografía

Gishu
fuente
99
" DesignData " se utiliza para "Blendability", lo que le permite agregar datos basados ​​en el marcado WPF, que es, cuando se aplican las configuraciones correctas, y luego se muestran en tiempo de diseño.
PGallagher
66
También tenga en cuenta que el Contenido se incluirá al usar la implementación con un clic, pero Ninguno no lo hará incluso si se selecciona "copiar si es más reciente".
Dax Fohl el
44
¿Qué pasa con Fakes, CodeAnalysisDictionary y XamlAppRef?
Crono
1
@jxramos Esta información se guarda en el archivo del proyecto.
Tobias
18
¿Qué hay de AdditionalFiles? Lo veo en VS 2015, pero no pude encontrar una referencia para eso.
Desarrollador holístico el
111

De la documentación:

La propiedad BuildAction indica lo que Visual Studio hace con un archivo cuando se ejecuta una compilación. BuildAction puede tener uno de varios valores:

Ninguno: el archivo no se incluye en el grupo de salida del proyecto y no se compila en el proceso de creación. Un ejemplo es un archivo de texto que contiene documentación, como un archivo Léame.

Compilar: el archivo se compila en la salida de compilación. Esta configuración se usa para archivos de código.

Contenido: el archivo no se compila, pero se incluye en el grupo de salida Contenido. Por ejemplo, esta configuración es el valor predeterminado para un .htm u otro tipo de archivo web.

Recurso incrustado: este archivo se incrusta en la salida de compilación del proyecto principal como un archivo DLL o ejecutable. Por lo general, se usa para archivos de recursos.

Paul Batum
fuente
1
¡Interesante! Tengo instalado VS2008, me pregunto por qué no aparecieron en mi documentación.
Paul Batum
¿Qué pasa con el recurso PRI?
Yawar
1
@PaulBatum, ¿puede insertar la referencia para esta definición citada?
Rajan Prasad
@ Raymond 232: ¿Qué definición citada?
Peter Mortensen
1
@PaulBatum: Sí, de hecho, la referencia sería buena. La respuesta comienza con "De la documentación", por lo que se agradecería un enlace a esta documentación.
Marc
35

Página: toma el archivo XAML especificado y lo compila en BAML e integra esa salida en la secuencia de recursos administrados para su ensamblaje (específicamente AssemblyName.g.resources), además, si tiene los atributos apropiados en el elemento XAML raíz en el archivo, creará un archivo blah.g.cs, que contendrá una clase parcial del "código subyacente" para esa página; Básicamente, esto implica una llamada al goop de BAML para rehidratar el archivo en la memoria y establecer cualquiera de las variables miembro de su clase en los elementos ahora creados (por ejemplo, si coloca x: Name = "foo" en un elemento , podrás hacer esto.foo.Background = Purple; o similar.

ApplicationDefinition: similar a Page, excepto que va más allá y define el punto de entrada para su aplicación que creará una instancia de su objeto de aplicación, ejecutará una llamada en él, que luego instanciará el tipo establecido por la propiedad StartupUri y le dará su ventana principal .

Además, para ser claros, esta pregunta en general es infinada en su conjunto de resultados; cualquiera puede definir BuildActions adicionales simplemente construyendo una Tarea MSBuild. Si busca en el directorio% systemroot% \ Microsoft.net \ framework \ v {versión} \, y mira el archivo Microsoft.Common.targets, debería poder descifrar muchos más (por ejemplo, con VS Pro y superior, hay una acción "Shadow" que le permite generar accesores privados para ayudar con la prueba de la unidad de clases privadas.

Dominic Hopton
fuente
Espero que no te importe que copié partes de tu respuesta en la respuesta de Gishu, para obtener una respuesta de referencia más completa.
Ian Boyd
32

VS2010 tiene una propiedad para 'Crear acción' y también para 'Copiar al directorio de salida'. Por lo tanto, una acción de 'Ninguno' se copiará en el directorio de compilación si la propiedad de copia se establece en 'Copiar si es más nueva' o 'Copiar siempre'.

Por lo tanto, una Acción de compilación de 'Contenido' debe reservarse para indicar el contenido al que accederá a través de 'Application.GetContentStream'

Utilicé la configuración 'Build Action' de 'None' y la configuración 'Copy to Output Direcotry' de 'Copy if Newer' para algunos .config incluidos externamente.

SOL.

Gerard ONeill
fuente
Gracias por esto. Sin embargo, estoy un poco confundido sobre cómo / dónde hago esto. Idealmente, me gustaría simplemente "incluir" mi carpeta "Cargar", y todos los archivos secundarios se incluirán en la publicación.
SamJolly
Esto se aplica a las propiedades de un elemento individual en el explorador de objetos, que verá en la pestaña de propiedades cuando seleccione un elemento o haga clic con el botón derecho y seleccione propiedades. Para lo que desea, creo que solo tiene que agregar un elemento existente cuando hace clic derecho en el proyecto. Por cierto, el botón Guardar del cuadro de diálogo Agregar elemento existente tiene un menú desplegable que le permite agregarlo como un enlace. Es posible que aún tenga que agregar los elementos dentro de la carpeta.
Gerard ONeill
5

En VS2008, la entrada de documento que parece más útil es:

Windows Presentation Foundation Creación de una aplicación WPF (WPF)

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

ApplicationDefinition Identifica el archivo de marcado XAML que contiene la definición de la aplicación (un archivo de marcado XAML cuyo elemento raíz es Aplicación). ApplicationDefinition es obligatorio cuando Install es verdadero y OutputType es winexe. Una aplicación WPF y, en consecuencia, un proyecto MSBuild solo puede tener una definición de aplicación.

Página Identifica un archivo de marcado XAML cuyo contenido se convierte a un formato binario y se compila en un ensamblado. Los elementos de página generalmente se implementan junto con una clase de código subyacente.

Los elementos de página más comunes son archivos XAML cuyos elementos de nivel superior son uno de los siguientes:

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

Recurso Identifica un archivo de recursos que se compila en un ensamblaje de aplicación. Como se mencionó anteriormente, UICulture procesa elementos de recursos.

Contenido Identifica un archivo de contenido que se distribuye con una aplicación. Los metadatos que describen el archivo de contenido se compilan en la aplicación (usando AssemblyAssociatedContentFileAttribute).

James Moore
fuente
4

¿Qué tal esta página de Microsoft Connect (que explica los tipos DesignData y DesignDataWithDesignTimeCreatableTypes)? Citando:

A continuación se describen las dos acciones de compilación para archivos de datos de muestra.

Los archivos .xaml de datos de muestra deben tener asignada una de las siguientes acciones de compilación:

DesignData : los tipos de datos de muestra se crearán como tipos falsos. Utilice esta acción de compilación cuando los tipos de datos de muestra no sean creables o tengan propiedades de solo lectura para las que desee definir valores de datos de muestra.

DesignDataWithDesignTimeCreatableTypes : los tipos de datos de muestra se crearán utilizando los tipos definidos en el archivo de datos de muestra. Utilice esta acción de compilación cuando los tipos de datos de muestra se puedan crear utilizando su constructor vacío predeterminado.

No es tan increíblemente exhaustivo, pero al menos da una pista. Este tutorial de MSDN también da algunas ideas. No sé si estas acciones de compilación también son aplicables para proyectos que no son de Silverlight.

Por Lundberg
fuente
4
  • Fakes: parte del marco de Microsoft Fakes (Unit Test Isolation). No disponible en todas las versiones de Visual Studio. Las falsificaciones se utilizan para respaldar las pruebas unitarias en su proyecto, lo que le ayuda a aislar el código que está probando al reemplazar otras partes de la aplicación con trozos o cuñas. Más aquí: https://msdn.microsoft.com/en-us/library/hh549175.aspx
Jorge García
fuente