Estamos usando 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 AssemblyInfo.cs local 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 mediante el siguiente procedimiento:
- Seleccione Agregar / Elemento existente ... en el menú contextual del proyecto
- Seleccione GlobalAssemblyInfo.cs
- Expanda el botón Agregar haciendo clic en esa pequeña flecha hacia abajo en la mano derecha
- Seleccione "Agregar como enlace" en la lista desplegable de botones
AssemblyCultureAttribute
merece una mejor explicación. El atributo debería estar completamente ausente por completo (a menos que se trate de un conjunto de satélite). Cuando se usan conjuntos satelitales a gran escala, uno puede necesitar tres, no dos niveles de archivos de información de conjunto (conjunto global, conjunto principal y conjunto satélite que solo especifica la cultura en este caso).En mi caso, estamos creando un producto para el que tenemos una solución de Visual Studio, con varios componentes en sus propios proyectos. Los atributos comunes van. En la solución, hay alrededor de 35 proyectos y una información de ensamblaje común (CommonAssemblyInfo.cs), que tiene los siguientes atributos:
Los otros atributos, como AssemblyTitle, AssemblyVersion, etc., los suministramos por ensamblaje. Al construir un ensamblaje, tanto AssemblyInfo.cs como CommonAssemblyInfo.cs se integran 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 otros.
Espero que ayude.
fuente
<Compile Include="$(MSBuildThisFileDirectory)..\Common\CommonAssemblyInfo.cs"/>
, una directiva MSBuild que incluso puede estar en unCommon.targets
archivo compartido . Yay código de reutilización.La solución presentada por @JRoppert es casi la misma que yo. La única diferencia es que pongo las siguientes líneas en el archivo AssemblyInfo.cs local, ya que pueden variar con cada ensamblaje:
También (generalmente) utilizo 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 ensamblaje común también tiene:
Que establecerá el valor "ProductVersion" que muestra el Explorador de Windows.
fuente
MSBuild Community Tasks contiene una tarea personalizada llamada AssemblyInfo que puede usar para generar ensamblarinfo.cs. Requiere una pequeña edición manual de sus archivos csproj para usar, pero vale la pena.
fuente
En mi opinión, usar un GlobalAssemblyInfo.cs es más problemático de lo que vale, porque necesitas modificar cada archivo de proyecto y recordar modificar cada nuevo proyecto, mientras que obtienes un AssemblyInfo.cs por defecto.
Para los cambios en los valores globales (es decir, empresa, producto, etc.), los cambios suelen ser tan infrecuentes y fáciles de administrar que no creo que DRY deba ser una consideración. Simplemente ejecute el siguiente script de MSBuild (depende del paquete de extensión de MSBuild ) cuando desee cambiar manualmente los valores en todos los proyectos de manera única:
fuente
Para compartir un archivo entre múltiples 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. (fuente: free.fr )
En cuanto a qué poner en el archivo compartido, sugeriría poner cosas que se compartirían entre los ensamblados. Cosas como derechos de autor, compañía, tal vez versión.
fuente
No se recomienda usar un solo archivo AseemblyInfo.cs para múltiples proyectos. El archivo AssemblyInfo incluye información que puede ser relevante solo para ese ensamblado específico. Las dos piezas de información más obvias son el
AssemblyTitle
yAssemblyVersion
.Una mejor solución podría ser usar un
targets
archivo, que es manejado por MSBuild, para "inyectar" atributos de ensamblaje en más de un proyecto.fuente
Una cosa que he encontrado útil es generar los elementos AssemblyVersion (etc.) aplicando la sustitución de tokens en la fase previa a la compilación.
Yo uso TortoiseSVN, y es fácil de usar su
SubWCRev.exe
a su vez una plantillaAssemblyInfo.wcrev
enAssemblyInfo.cs
. La línea relevante en la plantilla podría verse así:El tercer elemento es entonces el número de revisión. Utilizo el cuarto elemento para verificar que no he olvidado enviar ningún archivo nuevo o modificado (el cuarto elemento es 00 si todo está bien).
Por cierto, agregue
AssemblyInfo.wcrev
a su control de versiones e ignoreAssemblyInfo.cs
si usa esto.fuente