Atributo AssemblyVersion duplicado

147

Eu tenho um projeto que gera o seguinte erro na compilação:

erro CS0579: atributo 'AssemblyVersion' duplicado

Eu verifiquei o arquivo AssemblyInfo.cse parece que não há duplicação lá.

Encontrei este artigo no MSDN que aborda um problema semelhante e, seguindo a sugestão deste artigo, também corrige o problema.

Alguém pode me dizer o que está acontecendo aqui? Isso acontece apenas no caso de ter dois ou mais projetos com classes com nomes semelhantes? Ou é outra coisa?

Aamir
fonte
apenas um palpite, mas você tentou fechar e abrir a solução novamente? talvez isso possa resolver isso?
Stefto
4
Se estiver convertendo um projeto para o .NET Core, consulte elanderson.net/2017/06/…
Michael Freidgeim 7/17
Estou usando o Visual Studio 2017 Community edition no Mac. Eu tinha um aplicativo de console e adicionei uma referência a um novo projeto de biblioteca de classes. Esses erros começaram a aparecer quando eu fiz uma compilação. Tudo o que fiz foi remover a referência ao projeto da biblioteca de classes e adicioná-la novamente e os erros desapareceram.
Flea

Respostas:

126

Também já deparei com esse problema no passado, portanto, assumirei que seu processo de compilação fornece informações de montagem separadamente para fornecer versão. E isso causa uma duplicação, pois seu projeto também possui essas informações no AssemblyInfo.csarquivo. Portanto, remova o arquivo e acho que deve funcionar.

luqi
fonte
3
Portanto, o processo de criação não deve substituir a AssemblyVersion existente em vez de criar uma nova entrada? Sei que nosso processo de criação faz isso, mas estou curioso para saber por que não substitui o existente. É mal implementado ou é uma limitação?
Aamir
Eu acho que para montagens .net a melhor maneira seria usar o método de injeção de versão. Mas isso é uma história separada. No seu caso, o problema é que existem diferentes maneiras de fornecer versões de montagem, através dos parâmetros de construção do cmdline e do AssemblyInfo.cs, e você deve garantir que apenas um método esteja sendo usado como duplicação de atributos é um erro de compilação .net.
Luqi
remover o que exatamente?
roberto tomás
193

A partir do Visual Studio 2017, outra solução para continuar usando o AssemblyInfo.csarquivo é desativar a geração automática de informações de montagem como esta:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>
</Project>

Pessoalmente, acho muito útil para projetos que precisam oferecer suporte ao .NET Framework e ao .NET Standard.

Serge Semenov
fonte
4
Sim, isso funcionou para mim, excluir as pastas obj e bin não foi suficiente.
Nick Josevski
Infelizmente, cada vez que mudar o .csprojarquivo usando suas páginas de propriedades (Aplicação, construir, criar eventos, etc.), o PropertyGroupcom as GenerateAssemblyInfodesaparece :-(
Palo Mraz
3
Mova-o para um arquivo Directory.Build.props
Bryan
2
Existe algum risco ou resultado negativo possível com esta solução?
Mrcoulson 20/02/19
Corrigido meu problema perfeitamente!
Daniel Maclean
19

Eu tive o mesmo erro e estava sublinhando a versão do Assembly Vesrion e do arquivo de montagem. Portanto, ao ler a resposta Luqi, apenas as adicionei como comentários e o erro foi resolvido

// AssemblyVersion is the CLR version. Change this only when making breaking    changes
//[assembly: AssemblyVersion("3.1.*")]
// AssemblyFileVersion should ideally be changed with each build, and should help identify the origin of a build
//[assembly: AssemblyFileVersion("3.1.0.0")]
Pantelitsa Mavrovounioti
fonte
Eu tentei isso, e isso não mudou nada no meu caso :-(
Gertsen 17/07/1919
18

Ao converter um projeto mais antigo para o .NET Core, a maioria das informações contidas no AssemblyInfo.cs agora pode ser definida no próprio projeto. Abra as propriedades do projeto e selecione a guia Pacote para ver as novas configurações.

A postagem de Eric L. Anderson "Atributo 'Duplicar' System.Reflection.AssemblyCompanyAttribute '" descreve 3 opções:

  • remova os itens conflitantes do arquivo AssemblyInfo.cs,
  • exclua completamente o arquivo ou
  • desativar GenerateAssemblyInfo (como sugerido em outra resposta de Serge Semenov )
Michael Freidgeim
fonte
Acho mais intuitivo e mais "Visual Studio" especificar esses atributos no projeto ( .csproj), porque são metadados em vez de código que descrevem a lógica real. Espero que no futuro tudo possa ser especificado no projeto! (Atualmente eu não pode especificar a visibilidade COM, assim que eu deixá-lo em AssemblyInfo.cs.)
Franklin Yu
9

No meu caso, alguns arquivos * .cs temporários gerados durante a compilação foram adicionados acidentalmente ao projeto.

Os arquivos eram do obj\Debugdiretório, então eles definitivamente não deveriam ter sido adicionados à solução. Um *.cscuringa ficou um pouco louco e os adicionou incorretamente.

A exclusão desses arquivos corrigiu o problema.

Nate Barbettini
fonte
9

No meu caso, havia uma subpasta em um projeto que era uma pasta de projeto:

  • sistema de arquivo:

    • c: \ projetos \ webapi \ wepapi.csproj
    • c: \ projetos \ webapi \ tests \ wepapitests.csproj
  • solução

    • webapi (pasta e projeto)
      • testes (pasta)
    • testes (pasta e projeto)

Então eu tive que remover a subpasta "testes" do projeto "webapi".

heringer
fonte
4

Para mim, foi que AssembyInfo.cs e SolutionInfo.cs tinham valores diferentes. Portanto, verifique esses arquivos também. Acabei de remover a versão de um deles.

Mariusz.W
fonte
3

Meu erro ocorreu porque, de alguma forma, havia uma pasta obj criada dentro da minha pasta de controladores. Basta fazer uma pesquisa no seu aplicativo por uma linha dentro do Assemblyinfo.cs. Pode haver uma duplicata em algum lugar.

Dwayne Love
fonte
Da mesma forma, eu tinha um arquivo .csproj (A) dentro de outra pasta pertencente a outro .csproj (B).
precisa
2

Isso normalmente acontece comigo se eu compilei o projeto no Visual Studio 2017 e, em seguida, tento reconstruir e executá-lo com o .NET Core com o comando de linha de comando "dotnet run".

Simplesmente excluir todas as pastas "bin" e "obj" - tanto dentro do "ClientApp" quanto diretamente na pasta do projeto - permitiu que o comando do .NET Core "dotnet run" fosse reconstruído e executado com êxito.

William
fonte
2

Já deve haver um arquivo AssemblyInfo.cs no projeto aqui: insira a descrição da imagem aqui

Para resolver: - Exclua qualquer um AssemblyInfo.cs

Tejas Katakdhond
fonte
1

Outra solução ao atualizar o núcleo para o VS2017 é removê-los no arquivo properties \ assemblyinfo.cs.

Uma vez que agora eles são armazenados no projeto.

Thomas Koelle
fonte
1

Me deparei com o mesmo quando tentei adicionar a ferramenta GitVersion para atualizar minha versão no AssemblyInfo.cs. Use o projeto VS2017 e .NET Core. Então eu apenas misturei os dois mundos. Meu AssemblyInfo.cs contém apenas informações de versão que foram geradas pela ferramenta GitVersion, meu csproj contém o restante das coisas. Observe que eu não uso, <GenerateAssemblyInfo>false</GenerateAssemblyInfo>eu uso atributos relacionados apenas à versão (veja abaixo). Mais detalhes aqui Propriedades do AssemblyInfo .

AssemblyInfo.cs

[assembly: AssemblyVersion("0.2.1.0")]
[assembly: AssemblyFileVersion("0.2.1.0")]
[assembly: AssemblyInformationalVersion("0.2.1+13.Branch.master.Sha.119c35af0f529e92e0f75a5e6d8373912d457818")]

my.csproj contém todos relacionados a outros atributos assemblyu:

<PropertyGroup>
...
<Company>SOME Company </Company>
<Authors>Some Authors</Authors>
<Product>SOME Product</Product>
...
<GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute><GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>

O csproj mapeia a guia do pacote nas propriedades do projeto

Alezis
fonte
1

Eu tive esse problema quando meu projeto principal estava na mesma pasta que a solução, então eu tinha um projeto separado na mesma solução, localizado em uma subpasta, e esse projeto separado usou o projeto principal como referência. Isso fez com que o projeto principal detectasse a subpasta bin & obj, que criava referências duplicadas.

Mark Entingh
fonte
Isso me ajudou muito! Um projeto referenciou outro como uma dependência em tempo de construção, mas um erro no csproj fez com que as pastas obj fossem diferentes, gerando esse erro.
Chad Jessup
0

Meu erro foi que eu também estava referenciando outro arquivo no meu projeto, que também continha um valor para o atributo "AssemblyVersion". Eu removi esse atributo de um dos arquivos e agora está funcionando corretamente.

A chave é garantir que esse valor não seja declarado mais de uma vez em qualquer arquivo no seu projeto.

Antoine Dijoux
fonte
0

Edite você AssemblyInfo.cs e #if! NETCOREAPP3_0 ... #endif

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.

#if !NETCOREAPP3_0  

[assembly: AssemblyTitle(".Net Core Testing")]
[assembly: AssemblyDescription(".Net Core")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct(".Net Core")]
[assembly: AssemblyCopyright("Copyright ©")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible
// to COM components.  If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("000b119c-2445-4977-8604-d7a736003d34")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

#endif
Sourcephy
fonte
0

Eu recebi esse erro quando coloquei 2 projetos no mesmo diretório. Se eu tiver um diretório com uma solução e colocar um diretório Web e Dados separado, ele será compilado corretamente.

Herman Van Der Blom
fonte
0

Se você estiver enfrentando esse problema em um Pipeline de Compilação no Azure DevOps, tente colocar a Ação de Compilação como "Conteúdo" e Copiar no Diretório de Saída igual a "Copiar se mais recente" nas propriedades do arquivo AssembyInfo.cs.

Marcello Teófilo Fonteles
fonte
0
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(15,12): error CS0579: Duplicate 'System.Reflection.AssemblyConfigurationAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(16,12): error CS0579: Duplicate 'System.Reflection.AssemblyFileVersionAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(17,12): error CS0579: Duplicate 'System.Reflection.AssemblyInformationalVersionAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(18,12): error CS0579: Duplicate 'System.Reflection.AssemblyProductAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(19,12): error CS0579: Duplicate 'System.Reflection.AssemblyTitleAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(20,12): error CS0579: Duplicate 'System.Reflection.AssemblyVersionAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]

Eu acredito que minha pasta Biblioteca foi corrompida por uma criação inadvertida de outra biblioteca de classes. Excluí a biblioteca de todos os arquivos associados, mas o problema persistiu. Encontrei uma solução alternativa ao excluir TODAS as pastas bin e obj no diretório. A compilação estava ok anteriormente, mas encontrou uma subpasta que tinha o mesmo arquivo assemblyinfo.cs.

John Flurkey
fonte
0

Esse problema é um conflito de referência que é principalmente peculiar ao VS 2017.

Resolvi esse mesmo erro simplesmente comentando as linhas 7 a 14 e os códigos de versão do Assembly na parte inferior da página em AssemblyInfo.cs

Ele removeu todas as referências duplicadas e o projeto foi capaz de construir novamente.

Adeakinwe
fonte