visual-studio - duplicate - atributo system reflection assemblycompanyattribute duplicado
Equivalente a AssemblyInfo en dotnet core/csproj (6)
Agregando a la respuesta de NightOwl888, puede ir un paso más allá y agregar una clase
AssemblyInfo
lugar de solo una clase simple:
Dado que dotnet core volvió al formato
.csproj
, hay un nuevo
MyProject.AssemblyInfo.cs
autogenerado 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.
Como están definidos allí, no puedo definirlos yo mismo en el clásico
AssemblyInfo.cs
.
¿Dónde / cómo puedo definir la Compañía y la Versión de un proyecto?
Como ya has notado, puedes controlar la mayoría de estas configuraciones en .csproj.
Si prefiere mantenerlos en AssemblyInfo.cs, puede desactivar los atributos de ensamblaje generados automáticamente.
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
Si desea ver lo que sucede debajo del capó, consulte Microsoft.NET.GenerateAssemblyInfo.targets dentro de Microsoft.NET.Sdk.
Esa configuración se ha movido al archivo .csproj.
De forma predeterminada, no se muestran, pero puede descubrirlos desde Visual Studio 2017 en la pestaña
Package
propiedades del proyecto.
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 la
Version
se muestra como "Versión del producto"
Hago lo siguiente para mis proyectos .NET Standard 2.0.
Cree un archivo
Directory.Build.props
(por ejemplo, en la raíz de su repositorio) y mueva las propiedades que se compartirán desde el archivo
.csproj
a este archivo.
MSBuild lo recogerá automáticamente y los aplicará a
AssemblyInfo.cs
autogenerado.
También se aplican al paquete nuget al crear uno con
dotnet pack
o mediante la interfaz de usuario en Visual Studio 2017.
Ver https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build
Quiero ampliar este tema / respuestas con lo siguiente.
Como alguien mencionó, este
AssemblyInfo
generado automáticamente puede ser un obstáculo para las herramientas externas.
En mi caso, al usar
FinalBuilder
, tuve un problema que la información de construcción no estaba actualizando
AssemblyInfo
.
Aparentemente,
FinalBuilder se
basa en el archivo
~proj
para encontrar la ubicación de la información de
ensamblaje
.
Pensé, se veía en cualquier lugar debajo de la carpeta del proyecto.
No. Entonces, cambiando esto
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
solo tenía el trabajo, permitía información de ensamblaje personalizada si se compilaba con VS IDE / MS Build. Pero necesitaba que FinalBuilder lo hiciera también sin manipulaciones manuales en el archivo de información de ensamblaje. Necesitaba satisfacer todos los programas, MSBuild / VS y FinalBuilder.
ItemGroup
esto agregando una entrada al
ItemGroup
existente
<ItemGroup>
<Compile Remove="Common/**" />
<Content Remove="Common/**" />
<EmbeddedResource Remove="Common/**" />
<None Remove="Common/**" />
<!-- new added item -->
<None Include="Properties/AssemblyInfo.cs" />
</ItemGroup>
Ahora, con este elemento,
FinalBuilder
encuentra la ubicación de
AssemblyInfo
y modifica el archivo.
Si bien la acción
None
permite que MSBuild / DevEnv ignore esta entrada y ya no informe un error basado en la acción de
Compile
que generalmente viene con la entrada de información de ensamblaje en los archivos de proyecto.
C: / Archivos de programa / dotnet / sdk / 2.0.2 / Sdks / Microsoft.NET.Sdk / build / Microsoft.NET.Sdk.DefaultItems.targets (263,5): error: se incluyeron elementos duplicados de ''Compilación''. El SDK de .NET incluye elementos ''Compilar'' del directorio de su proyecto de manera predeterminada. Puede eliminar estos elementos de su archivo de proyecto o establecer la propiedad ''EnableDefaultCompileItems'' en ''falso'' si desea incluirlos explícitamente en su archivo de proyecto. Para obtener más información, consulte https://aka.ms/sdkimplicititems . Los elementos duplicados fueron: ''AssemblyInfo.cs''
Siempre puede agregar su propio
AssemblyInfo.cs
, que es útil para
InternalsVisibleToAttribute
,
CLSCompliantAttribute
y otros que no se generan automáticamente.
Agregar AssemblyInfo.cs a un proyecto
-
En el Explorador de soluciones, haga clic con el botón derecho en
<project name> > Add > New Folder
.
- Nombre de la carpeta "Propiedades".
-
Haga clic derecho en la carpeta "Propiedades" y haga clic en
Add > New Item...
- Seleccione "Clase" y asígnele el nombre "AssemblyInfo.cs".
Supresión de atributos autogenerados
Si desea mover sus atributos nuevamente a AssemblyInfo.cs en lugar de hacer que se generen automáticamente, puede suprimirlos en MSBuild como señaló natemcmaster en share .