tipos texto son programacion parrafos las etiquetas ejemplos cuales codigos .net assemblies attributes assemblyinfo

.net - texto - ¿Cuáles son las mejores prácticas para usar los atributos de ensamblaje?



texto html (8)

Tengo una solución con proyecto múltiple. Estoy tratando de optimizar los archivos AssemblyInfo.cs al vincular un archivo de información de conjunto de una solución amplia. ¿Cuáles son las mejores prácticas para hacer esto? ¿Qué atributos deberían estar en un archivo de solución amplia y cuáles son específicos del proyecto / ensamblaje?

Editar: Si está interesado, hay una pregunta de seguimiento ¿ Qué diferencias hay entre AssemblyVersion, AssemblyFileVersion y AssemblyInformationalVersion?


En mi caso, estamos creando un producto para el cual tenemos una solución de Visual Studio, con varios componentes en sus propios proyectos. Los atributos comunes van. En la solución, hay aproximadamente 35 proyectos y una información de ensamblaje común (CommonAssemblyInfo.cs), que tiene los siguientes atributos:

[assembly: AssemblyCompany("Company")] [assembly: AssemblyProduct("Product Name")] [assembly: AssemblyCopyright("Copyright © 2007 Company")] [assembly: AssemblyTrademark("Company")] //This shows up as Product Version in Windows Explorer //We make this the same for all files in a particular product version. And increment it globally for all projects. //We then use this as the Product Version in installers as well (for example built using Wix). [assembly: AssemblyInformationalVersion("0.9.2.0")]

Los otros atributos, como AssemblyTitle, AssemblyVersion, etc., los suministramos por conjunto. Al construir un ensamblado, tanto AssemblyInfo.cs como CommonAssemblyInfo.cs están integrados en cada ensamblaje. Esto nos brinda lo mejor de ambos mundos, donde es posible que desee tener algunos atributos comunes para todos los proyectos y valores específicos para algunos otros.

Espero que ayude.


En mi opinión, usar GlobalAssemblyInfo.cs es más problemático de lo que vale, ya que necesita modificar cada archivo de proyecto y recordar modificar cada nuevo proyecto, mientras que usted obtiene un AssemblyInfo.cs por defecto.

Para los cambios en los valores globales (es decir, empresa, producto, etc.) los cambios suelen ser tan poco frecuentes y fáciles de gestionar que no creo que DRY deba ser una consideración. Simplemente ejecute el siguiente script de MSBuild (dependiente del MSBuild Extension Pack ) cuando desee cambiar manualmente los valores en todos los proyectos como una sola vez:

<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" DefaultTargets="UpdateAssemblyInfo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <AllAssemblyInfoFiles Include="../**/AssemblyInfo.cs" /> </ItemGroup> <Import Project="MSBuild.ExtensionPack.tasks" /> <Target Name="UpdateAssemblyInfo"> <Message Text="%(AllAssemblyInfoFiles.FullPath)" /> <MSBuild.ExtensionPack.Framework.AssemblyInfo AssemblyInfoFiles="@(AllAssemblyInfoFiles)" AssemblyCompany="Company" AssemblyProduct="Product" AssemblyCopyright="Copyright" ... etc ... /> </Target> </Project>


Estamos utilizando un archivo global llamado GlobalAssemblyInfo.cs y uno local llamado AssemblyInfo.cs. El archivo global contiene los siguientes atributos:

[assembly: AssemblyProduct("Your Product Name")] [assembly: AssemblyCompany("Your Company")] [assembly: AssemblyCopyright("Copyright © 2008 ...")] [assembly: AssemblyTrademark("Your Trademark - if applicable")] #if DEBUG [assembly: AssemblyConfiguration("Debug")] #else [assembly: AssemblyConfiguration("Release")] #endif [assembly: AssemblyVersion("This is set by build process")] [assembly: AssemblyFileVersion("This is set by build process")]

El local AssemblyInfo.cs contiene los siguientes atributos:

[assembly: AssemblyTitle("Your assembly title")] [assembly: AssemblyDescription("Your assembly description")] [assembly: AssemblyCulture("The culture - if not neutral")] [assembly: ComVisible(true/false)] // unique id per assembly [assembly: Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]

Puede agregar GlobalAssemblyInfo.cs utilizando el siguiente procedimiento:

  • Seleccione Agregar / elemento existente ... en el menú contextual del proyecto
  • Seleccione GlobalAssemblyInfo.cs
  • Expanda el botón Add-Button haciendo clic en esa pequeña flecha hacia abajo en la mano derecha
  • Seleccione "Agregar como enlace" en la lista desplegable de botones

La solución presentada por @JRoppert es casi lo mismo que yo. La única diferencia es que coloco las siguientes líneas en el archivo AssemblyInfo.cs local, ya que pueden variar con cada ensamblaje:

#if DEBUG [assembly: AssemblyConfiguration("Debug")] #else [assembly: AssemblyConfiguration("Release")] #endif [assembly: AssemblyVersion("This is set by build process")] [assembly: AssemblyFileVersion("This is set by build process")] [assembly: CLSCompliant(true)]

También (generalmente) uso una información de ensamblaje común por solución, con la suposición de que una solución es una sola línea de producto / producto liberable. El archivo de información de ensamblado común también tiene:

[assembly: AssemblyInformationalVersion("0.9.2.0")]

Que establecerá el valor de "ProductVersion" mostrado por el Explorador de Windows.


No se recomienda el uso de un solo archivo AseemblyInfo.cs para proyectos múltiples. El archivo AssemblyInfo incluye información que podría ser relevante solo para ese ensamblaje específico. Las dos piezas de información más obvias son AssemblyTitle y AssemblyVersion .

Una mejor solución podría ser utilizar el archivo de targets , que maneja MSBuild, para "inyectar" atributos de ensamblaje a más de un proyecto.


Para compartir un archivo entre varios proyectos, puede agregar un archivo existente como un enlace.

Para hacer esto, agregue un archivo existente y haga clic en "Agregar como enlace" en el selector de archivos. Agregar como enlace http://laurent.etiemble.free.fr/dotclear/images/AddLinkedFile03_tn.png

En cuanto a qué poner en el archivo compartido, sugeriría poner cosas que se compartirían en los ensamblajes. Cosas como copyright, compañía, quizás versión.


Una cosa que he encontrado útil es generar los elementos de AssemblyVersion (etc.) mediante la aplicación de sustitución de token en la fase previa a la construcción.

Yo uso TortoiseSvn, y es fácil de usar su SubWCRev.exe para convertir una plantilla AssemblyInfo.wcrev en AssemblyInfo.cs . La línea relevante en la plantilla podría verse más o menos así:

[assembly: AssemblyVersion("2.3.$WCREV$.$WCMODS?1:0$$WCUNVER?1:0$")]

El tercer elemento es el número de revisión. Utilizo el cuarto elemento para comprobar que no he olvidado confirmar ningún archivo nuevo o modificado (el cuarto elemento es 00 si todo está bien).

Por cierto, agregue AssemblyInfo.wcrev a su control de versión e ignore AssemblyInfo.cs si lo usa.


MSBuild Community Tasks contiene una tarea personalizada llamada AssemblyInfo que puede usar para generar su assemblyinfo.cs. Requiere una pequeña edición manual de sus archivos csproj para usar, pero vale la pena.