Attributo duplicato AssemblyVersion


147

Ho un progetto che genera il seguente errore durante la compilazione:

errore CS0579: attributo 'AssemblyVersion' duplicato

Ho controllato il file AssemblyInfo.cse sembra che non ci siano duplicazioni lì.

Ho trovato questo articolo su MSDN che risolve un problema simile e seguendo il suggerimento in questo articolo risolve anche il problema.

Qualcuno può dirmi cosa sta succedendo qui? Succede solo nel caso di avere due o più progetti con classi con nomi simili? O è qualcos'altro?


solo una supposizione ma, hai provato a chiudere e che aprendo di nuovo la soluzione? forse questo potrebbe risolverlo?
Stefto


Sto usando Visual Studio 2017 Community Edition su Mac. Avevo un'app console e quindi ho aggiunto un riferimento a un nuovo progetto di libreria di classi. Questi errori hanno iniziato a manifestarsi quando ho fatto una build. Tutto quello che ho fatto è stato rimuovere il riferimento al progetto della libreria di classi e quindi aggiungerlo nuovamente e gli errori sono scomparsi.
Pulce,

Risposte:


127

Ho anche riscontrato questo problema in passato, quindi suppongo che il processo di compilazione fornisca le informazioni di assemblaggio separatamente per fornire il controllo delle versioni. E ciò provoca una duplicazione poiché il tuo progetto ha anche quelle informazioni nel AssemblyInfo.csfile. Quindi rimuovere il file e penso che dovrebbe funzionare.


3
Quindi, il processo di compilazione non dovrebbe sovrascrivere AssemblyVersion esistente invece di creare una nuova voce? So che il nostro processo di compilazione lo fa, ma sono curioso di sapere perché non sovrascrive quello esistente. È implementato male o è una limitazione?
Aamir,

Penso che per gli assembly .net il modo migliore sarebbe usare il metodo di iniezione della versione. Ma questa è una storia separata. Nel tuo caso il problema è che ci sono diversi modi per fornire versioni di assembly, attraverso i parametri di build cmdline e attraverso AssemblyInfo.cs e devi assicurarti che venga utilizzato solo un metodo poiché la duplicazione degli attributi è un errore di compilazione .net.
luqi,

rimuovere cosa esattamente?
roberto tomás,

196

A partire da Visual Studio 2017 un'altra soluzione per continuare a utilizzare il AssemblyInfo.csfile è disattivare la generazione automatica delle informazioni sull'assemblaggio in questo modo:

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

Personalmente lo trovo molto utile per i progetti che devono supportare sia .NET Framework che .NET Standard.


4
Sì, ha funzionato per me, eliminare le cartelle obj e bin non era abbastanza.
Nick Josevski,

Sfortunatamente, ogni volta che cambio il .csprojfile usando le sue pagine delle proprietà (Applicazione, Build, Build Events, ecc.), Il PropertyGroupcon il GenerateAssemblyInfoscompare :-(
Palo Mraz,

3
Spostalo in un file Directory.Build.props
Bryan

2
Esistono rischi o esiti negativi con questa soluzione?
mrcoulson,

Risolto il mio problema perfettamente!
Daniel Maclean,

19

Ho avuto lo stesso errore e stava sottolineando la versione di Assembly Vesrion e Assembly File, quindi leggendo la risposta Luqi li ho appena aggiunti come commenti e l'errore è stato risolto

// 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")]

Ci ho provato e nel mio caso non è cambiato nulla :-(
Gertsen,

18

Quando si converte un progetto precedente in .NET Core, la maggior parte delle informazioni contenute in AssemblyInfo.cs ora possono essere impostate sul progetto stesso. Apri le proprietà del progetto e seleziona la scheda Pacchetto per vedere le nuove impostazioni.

Il post di Eric L. Anderson "Duplicato" Attributo System.Reflection.AssemblyCompanyAttribute " descrive 3 opzioni:

  • rimuovere gli elementi in conflitto dal file AssemblyInfo.cs,
  • eliminare completamente il file o
  • disabilita GenerateAssemblyInfo (come suggerito in un'altra risposta di Serge Semenov )

Trovo più intuitivo e più "Visual Studio" specificare questi attributi nel progetto ( .csproj), perché sono metadati anziché codice che descrivono la logica effettiva. Spero che in futuro tutto possa essere specificato nel progetto! (Attualmente non posso specificare la visibilità COM, quindi la lascio entrare AssemblyInfo.cs.)
Franklin Yu,

9

Nel mio caso, alcuni file temporanei * .cs generati durante la compilazione sono stati accidentalmente aggiunti al progetto.

I file provenivano dalla obj\Debugdirectory, quindi sicuramente non avrebbero dovuto essere aggiunti alla soluzione. Un *.cscarattere jolly è diventato un po 'folle e li ha aggiunti in modo errato.

L'eliminazione di questi file ha risolto il problema.


9

Nel mio caso, lì in cui una sottocartella in un progetto che era una cartella di progetto è autonoma:

  • file system:

    • c: \ progetti \ WebAPI \ wepapi.csproj
    • c: \ WebAPI \ test \ wepapitests.csproj progetti \
  • soluzione

    • webapi (cartella e progetto)
      • test (cartella)
    • test (cartella e progetto)

Quindi ho dovuto rimuovere la sottocartella "test" dal progetto "webapi".


4

Per me è stato che AssembyInfo.cs e SolutionInfo.cs avevano valori diversi. Quindi controlla anche questi file. Ho appena rimosso la versione da una di esse.


3

Il mio errore si è verificato perché, in qualche modo, c'era una cartella obj creata nella cartella dei miei controller. Basta fare una ricerca nella tua applicazione per una riga all'interno di Assemblyinfo.cs. Potrebbe esserci un duplicato da qualche parte.


Allo stesso modo, avevo un file .csproj (A) all'interno di un'altra cartella appartenente a un altro .csproj (B).
taylorswiftfan,

2

Questo di solito accade per me se ho compilato il progetto in Visual Studio 2017 e quindi provo a ricostruirlo ed eseguirlo con .NET Core con il comando da riga di comando "dotnet run".

La semplice eliminazione di tutte le cartelle "bin" e "obj" - sia all'interno di "ClientApp" che direttamente nella cartella del progetto - ha permesso al comando .NET Core "dotnet run" di essere ricostruito ed eseguito correttamente.


2

Nel progetto deve essere già presente un file AssemblyInfo.cs: inserisci qui la descrizione dell'immagine

Per risolvere: - Eliminare uno qualsiasi AssemblyInfo.cs


1

Un'altra soluzione quando si aggiorna core a VS2017 è rimuoverli nel file properties \ assemblyinfo.cs.

Dal momento che ora sono memorizzati nel progetto.



1

Mi sono imbattuto nello stesso quando ho provato ad aggiungere lo strumento GitVersion per aggiornare la mia versione in AssemblyInfo.cs. Utilizzare il progetto VS2017 e .NET Core. Quindi ho appena mescolato entrambi i mondi. Il mio AssemblyInfo.cs contiene solo le informazioni sulla versione generate dallo strumento GitVersion, il mio csproj contiene cose rimanenti. Nota che non utilizzo, <GenerateAssemblyInfo>false</GenerateAssemblyInfo>utilizzo solo gli attributi relativi alla versione (vedi sotto). Maggiori dettagli qui Proprietà 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 contiene tutti quelli relativi ad altri attributi assemblyu:

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

csproj esegue il mapping alla scheda del pacchetto nelle proprietà del progetto


1

Ho avuto questo problema quando il mio progetto principale era nella stessa cartella della soluzione, quindi avevo un progetto separato nella stessa soluzione situato in una sottocartella e quel progetto separato utilizzava il progetto principale come riferimento. Ciò ha portato il progetto principale a rilevare le cartelle bin & obj della sottocartella che hanno creato riferimenti duplicati.


Questo mi ha aiutato molto! Un progetto ha fatto riferimento ad un altro come dipendenza del tempo di costruzione, ma un bug nel csproj ha causato differenze nelle cartelle obj, generando questo errore.
Chad Jessup,

0

Il mio errore era che stavo anche facendo riferimento a un altro file nel mio progetto, che conteneva anche un valore per l'attributo "AssemblyVersion". Ho rimosso quell'attributo da uno dei file e ora funziona correttamente.

La chiave è assicurarsi che questo valore non sia dichiarato più di una volta in qualsiasi file nel progetto.


0

Modifica 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

0

Ho ricevuto questo errore quando ho inserito 2 progetti nella stessa directory. Se ho una directory con una soluzione e inserisco una directory Web e dati separata, viene compilata correttamente.


0

Se si riscontra questo problema in una pipeline di build su DevOps di Azure, provare a impostare l'azione di compilazione come "Contenuto" e Copia nella directory di output uguale a "Copia se più recente" nelle proprietà del file AssembyInfo.cs.


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]

Credo che la mia cartella della libreria sia stata danneggiata da una creazione involontaria di un'altra libreria di classi. Ho eliminato la libreria da un file tutto associato ma il problema persisteva. Ho trovato una soluzione eliminando TUTTE le cartelle bin e obj nella directory. La build era ok in precedenza, ma ha trovato una sottocartella con lo stesso file assemblyinfo.cs.


0

Questo problema è un conflitto di riferimento che è per lo più peculiare di VS 2017.

Ho risolto lo stesso errore semplicemente commentando le righe da 7 a 14 e i codici della versione di Assembly nella parte inferiore della pagina su AssemblyInfo.cs

Ha rimosso tutti i riferimenti duplicati e il progetto è stato in grado di ricostruire.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.