Equivalente a AssemblyInfo en dotnet core / csproj


Desde que dotnet core se movió de nuevo al formato .csproj hay un nuevo autogenerado MyProject.AssemblyInfo.cs que contiene entre otros.

[assembly: AssemblyCompany("MyProject")]
[assembly: AssemblyVersion("1.0.0.0")]

Tenga en cuenta que esto se regenera automáticamente cada compilación. Anteriormente, el archivo se encontraba en el directorio/ obj/, ahora parece estar solo en la memoria, ya que el archivo no se puede encontrar en el disco y al hacer clic en el mensaje de error no se abre ningún archivo.

Este es el mensaje de error: introduzca la descripción de la imagen aquí

Puesto que están definidos allí no puedo definir ellos mismo en el clásico AssemblyInfo.cs.

¿Dónde/cómo puedo definir la Empresa y la Versión de un proyecto?

Author: NightOwl888, 2017-02-09

5 answers

Como ya has notado, puedes controlar la mayoría de estos ajustes en .csproj.

Si prefiere mantenerlos en AssemblyInfo.cs, puede desactivar los atributos de ensamblaje generados automáticamente.

<PropertyGroup>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup> 

Si quieres ver lo que está pasando debajo del capó, checkout Microsoft. NET.GenerateAssemblyInfo.targets dentro de Microsoft.NET. Sdk.

 186
Author: natemcmaster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-17 23:29:20

Esa configuración se ha movido a la .archivo csproj.

De forma predeterminada, no aparecen, pero puede descubrirlos desde Visual Studio 2017 en la pestaña propiedades del proyecto Package.

Propiedades del proyecto, Paquete de pestañas

Una vez guardados esos valores se pueden encontrar en MyProject.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net461</TargetFramework>
    <Version>1.2.3.4</Version>
    <Authors>Author 1</Authors>
    <Company>Company XYZ</Company>
    <Product>Product 2</Product>
    <PackageId>MyApp</PackageId>
    <AssemblyVersion>2.0.0.0</AssemblyVersion>
    <FileVersion>3.0.0.0</FileVersion>
    <NeutralLanguage>en</NeutralLanguage>
    <Description>Description here</Description>
    <Copyright>Copyright</Copyright>
    <PackageLicenseUrl>License URL</PackageLicenseUrl>
    <PackageProjectUrl>Project URL</PackageProjectUrl>
    <PackageIconUrl>Icon URL</PackageIconUrl>
    <RepositoryUrl>Repo URL</RepositoryUrl>
    <RepositoryType>Repo type</RepositoryType>
    <PackageTags>Tags</PackageTags>
    <PackageReleaseNotes>Release</PackageReleaseNotes>
  </PropertyGroup>

En la pestaña de información de propiedades del explorador de archivos, FileVersion se muestra como " Versión del archivo "y Version se muestra como"Versión del producto"

 64
Author: hultqvist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-17 23:29:51

Hago lo siguiente para mis proyectos.NET Standard 2.0.

Crea un archivo Directory.Build.props (por ejemplo, en la raíz de tu repositorio) y mueva las propiedades a compartir del archivo .csproj a este archivo.

MSBuild lo recogerá automáticamente y lo aplicará al AssemblyInfo.cs generado automáticamente.

También se aplican al paquete nuget al compilar uno con dotnet pack o a través de la interfaz de usuario en Visual Studio 2017.

Véase https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build

 33
Author: pfx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-20 09:07:53

Siempre puede agregar su propio AssemblyInfo.cs, que es útil para InternalsVisibleToAttribute, CLSCompliantAttribute y otros que no se generan automáticamente.

Añadiendo AssemblyInfo.cs a un proyecto

  1. En el Explorador de soluciones, haga clic derecho en <project name> > Add > New Folder.

Añadir Nueva Carpeta

  1. Nombre la carpeta "Propiedades".

Propiedades de la carpeta de nombre

  1. Haga clic derecho en la carpeta" Propiedades" y haga clic Add > New Item....

Añadir Nuevo Elemento

  1. Seleccione "Class" y asígnele el nombre "AssemblyInfo.cs".

Nombre del archivo AssemblyInfo.cs

Suprimiendo Atributos Generados automáticamente

Si desea mover sus atributos de nuevo a AssemblyInfo.cs en lugar de generarlos automáticamente, puede suprimirlos en MSBuild como natemcmaster señaló en su respuesta.

 26
Author: NightOwl888,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-13 12:52:31

Quiero ampliar este tema/respuestas con lo siguiente. Como alguien mencionó, este auto-generado AssemblyInfo puede ser un obstáculo para las herramientas externas. En mi caso, usando FinalBuilder, tuve un problema que AssemblyInfo no estaba siendo actualizado por la acción de compilación. Aparentemente, FinalBuilder se basa en el archivo ~proj para encontrar la ubicación del AssemblyInfo . Pensé, que estaba buscando en cualquier lugar en la carpeta del proyecto. No. Así que, cambiando esto

<PropertyGroup>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup> 

Solo tenía el trabajo, permitía información de ensamblado personalizada si se construía por VS IDE/MS Build. Pero necesitaba FinalBuilder hacerlo también sin manipulaciones manuales para ensamblar el archivo de información. Necesitaba satisfacer todos los programas, MSBuild / VS y FinalBuilder.

Resolví esto agregando una entrada a la ItemGroup

<ItemGroup>
   <Compile Remove="Common\**" />
   <Content Remove="Common\**" />
   <EmbeddedResource Remove="Common\**" />
   <None Remove="Common\**" />
   <!-- new added item -->
   <None Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

Ahora, teniendo este elemento, FinalBuilder encuentra la ubicación de AssemblyInfo y modifica el archivo. Mientras que action None permite MSBuild / DevEnv ignora esta entrada y ya no reporta un error basado en la acción Compile que normalmente viene con la entrada de Información del ensamblado en los archivos proj.

C:\Program Files \ dotnet \ sdk \ 2.0.2 \ Sdks \ Microsoft. NET. Sdk \ build \ Microsoft. NET. Sdk. DefaultItems. targets(263,5): error: Se incluyeron elementos 'Compilar' duplicados. El SDK de. NET incluye elementos' Compilar ' desde el directorio del proyecto de forma predeterminada. Puede eliminar estos elementos del archivo de proyecto o establecer el La propiedad 'EnableDefaultCompileItems' a 'false' si desea incluirlos explícitamente en su archivo de proyecto. Para más información, ver https://aka.ms/sdkimplicititems . Los elementos duplicados fueron: 'AssemblyInfo.cs " {[18]]}

 0
Author: T.S.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-17 23:28:36