error duplicate duplicado cs0579 attribute atributo assemblycompanyattribute visual-studio visual-studio-2017 .net-core assemblyinfo

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.

Este es el mensaje de error:

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

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

  1. Nombre de la carpeta "Propiedades".

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

  1. 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 .