Buscar..


Observaciones

El nombre de archivo AssemblyInfo.cs se usa por convención como el archivo de origen donde los desarrolladores colocan atributos de metadatos que describen el ensamblaje completo que están construyendo.

[Título de la asamblea]

Este atributo se utiliza para dar un nombre a este conjunto particular.

[assembly: AssemblyTitle("MyProduct")]

[Producto de la Asamblea]

Este atributo se utiliza para describir el producto para el que se utiliza este ensamblaje en particular. Los conjuntos múltiples pueden ser componentes del mismo producto, en cuyo caso todos pueden compartir el mismo valor para este atributo.

[assembly: AssemblyProduct("MyProduct")]

AssemblyInfo global y local

Al tener un permiso global para un mejor DRYness, solo necesita poner valores que sean diferentes en AssemblyInfo.cs para proyectos que tengan variaciones. Este uso asume que su producto tiene más de un proyecto de estudio visual.

GlobalAssemblyInfo.cs

using System.Reflection;
using System.Runtime.InteropServices;
//using Stackoverflow domain as a made up example    

// It is common, and mostly good, to use one GlobalAssemblyInfo.cs that is added 
// as a link to many projects of the same product, details below
// Change these attribute values in local assembly info to modify the information.
[assembly: AssemblyProduct("Stackoverflow Q&A")]
[assembly: AssemblyCompany("Stackoverflow")]
[assembly: AssemblyCopyright("Copyright © Stackoverflow 2016")]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("4e4f2d33-aaab-48ea-a63d-1f0a8e3c935f")]
[assembly: ComVisible(false)] //not going to expose ;)

// Version information for an assembly consists of the following four values:
// roughly translated from I reckon it is for SO, note that they most likely 
// dynamically generate this file
//      Major Version  - Year 6 being 2016
//      Minor Version  - The month
//      Day Number     - Day of month
//      Revision       - Build number
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below: [assembly: AssemblyVersion("year.month.day.*")]
[assembly: AssemblyVersion("2016.7.00.00")] 
[assembly: AssemblyFileVersion("2016.7.27.3839")]

AssemblyInfo.cs - uno para cada proyecto

//then the following might be put into a separate Assembly file per project, e.g.
[assembly: AssemblyTitle("Stackoveflow.Redis")]

Puede agregar GlobalAssemblyInfo.cs al proyecto local mediante el siguiente procedimiento :

  1. Seleccione Agregar / artículo existente ... en el menú contextual del proyecto
  2. Seleccione GlobalAssemblyInfo.cs
  3. Expanda el botón Agregar haciendo clic en esa pequeña flecha hacia abajo en la mano derecha
  4. Seleccione "Agregar como enlace" en la lista desplegable de botones

[AssemblyVersion]

Este atributo aplica una versión al ensamblaje.

[assembly: AssemblyVersion("1.0.*")]

El carácter * se usa para incrementar automáticamente una parte de la versión automáticamente cada vez que compila (a menudo se usa para el número de "compilación")

Leyendo los atributos de la asamblea

Usando las API de reflexión enriquecida de .NET, puede obtener acceso a los metadatos de un ensamblaje. Por ejemplo, puede obtener el atributo de título de this ensamblaje con el siguiente código

using System.Linq;
using System.Reflection;

...

Assembly assembly = typeof(this).Assembly;
var titleAttribute = assembly.GetCustomAttributes<AssemblyTitleAttribute>().FirstOrDefault();

Console.WriteLine($"This assembly title is {titleAttribute?.Title}");

Control de versiones automatizado

Su código en el control de origen tiene números de versión de forma predeterminada (identificadores de SVN o hash Git SHA1) o explícitamente (etiquetas Git). En lugar de actualizar manualmente las versiones en AssemblyInfo.cs, puede utilizar un proceso de compilación para escribir la versión de su sistema de control de origen en sus archivos AssemblyInfo.cs y, por lo tanto, en sus ensamblajes.

Los paquetes GitVersionTask o SemVer.Git.Fody NuGet son ejemplos de lo anterior. Para usar GitVersionTask, por ejemplo, después de instalar el paquete en su proyecto, elimine los atributos de la Assembly*Version de sus archivos AssemblyInfo.cs. Esto pone a GitVersionTask a cargo de la versión de sus ensamblajes.

Tenga en cuenta que el control de versiones semántico es cada vez más el estándar de facto , por lo que estos métodos recomiendan el uso de etiquetas de control de origen que siguen a SemVer.

Campos comunes

Es una buena práctica completar los campos predeterminados de AssemblyInfo. La información puede ser recogida por los instaladores y luego aparecerá cuando utilice Programas y características (Windows 10) para desinstalar o cambiar un programa.

El mínimo debe ser:

  • AssemblyTitle: normalmente el espacio de nombres, es decir , MyCompany.MySolution.MyProject
  • AssemblyCompany - el nombre completo de las personas jurídicas
  • Producto de la asamblea - la comercialización puede tener una visión aquí
  • AssemblyCopyright - Manténgalo actualizado ya que se ve desaliñado de lo contrario

'AssemblyTitle' se convierte en la 'Descripción del archivo' al examinar la pestaña de Detalles de propiedades de la DLL.

[Configuración de la Asamblea]

AssemblyConfiguration: El atributo AssemblyConfiguration debe tener la configuración que se usó para construir el ensamblaje. Utilice la compilación condicional para incluir correctamente diferentes configuraciones de ensamblaje. Usa el bloque similar al siguiente ejemplo. Agregue tantas configuraciones diferentes como comúnmente usa.

#if (DEBUG)

[assembly: AssemblyConfiguration("Debug")]

#else

[assembly: AssemblyConfiguration("Release")]

#endif

[InternalsVisibleTo]

Si desea que internal clases o funciones internal de un conjunto sean accesibles desde otro conjunto, declare esto mediante InternalsVisibleTo y el nombre del conjunto al que se permite acceder.

En este ejemplo, el código en el ensamblaje MyAssembly.UnitTests puede llamar a elementos internal desde MyAssembly .

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]

Esto es especialmente útil para pruebas de unidad para prevenir declaraciones public innecesarias.

[AssemblyKeyFile]

Cuando queremos que nuestro ensamblaje se instale en GAC, es necesario tener un nombre sólido. Para un conjunto de denominación fuerte tenemos que crear una clave pública. Para generar el archivo .snk .

Para crear un archivo de clave de nombre seguro

  1. Símbolo del sistema de desarrolladores para VS2015 (con acceso de administrador)
  2. En el símbolo del sistema, escriba cd C: \ Directory_Name y presione ENTRAR.
  3. En el símbolo del sistema, escriba sn -k KeyFileName.snk y, a continuación, presione ENTRAR.

una vez que se haya creado el keyFileName.snk en el directorio especificado, déle una referencia en su proyecto. del atributo AssemblyKeyFileAttribute la ruta al archivo snk para generar la clave cuando construimos nuestra biblioteca de clases.

Propiedades -> AssemblyInfo.cs

[assembly: AssemblyKeyFile(@"c:\Directory_Name\KeyFileName.snk")]

Thi creará un ensamblaje de nombre seguro después de la construcción. Después de crear su conjunto de nombre seguro, puede instalarlo en GAC

Feliz codificación :)



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow