Duplizieren Sie das AssemblyVersion-Attribut

146

Ich habe ein Projekt, das beim Kompilieren folgenden Fehler generiert:

Fehler CS0579: Duplizieren Sie das Attribut 'AssemblyVersion'

Ich habe die Datei überprüft AssemblyInfo.csund es sieht so aus, als ob dort keine Duplizierung vorhanden ist.

Ich habe diesen Artikel auf MSDN gefunden, der ein ähnliches Problem behebt, und wenn ich dem Vorschlag in diesem Artikel folge, wird das Problem ebenfalls behoben.

Kann mir jemand sagen, was hier los ist? Kommt es nur vor, wenn zwei oder mehr Projekte mit Klassen mit ähnlichen Namen vorliegen? Oder ist es etwas anderes?

Aamir
quelle
Nur eine Vermutung, aber haben Sie versucht, die Lösung wieder zu öffnen? Vielleicht könnte das das Problem lösen?
Stefto
4
Wenn Sie ein Projekt in .NET Core konvertieren, siehe elanderson.net/2017/06/…
Michael Freidgeim
Ich verwende die Visual Studio 2017 Community Edition auf dem Mac. Ich hatte eine Konsolen-App und fügte dann einen Verweis auf ein neues Klassenbibliotheksprojekt hinzu. Diese Fehler wurden angezeigt, als ich einen Build erstellt habe. Ich habe lediglich den Verweis auf das Klassenbibliotheksprojekt entfernt und ihn dann wieder hinzugefügt, und die Fehler sind verschwunden.
Floh

Antworten:

125

Ich bin in der Vergangenheit auch auf dieses Problem gestoßen, daher gehe ich davon aus, dass Ihr Erstellungsprozess Assembly-Informationen separat zur Versionsverwaltung bereitstellt. Dies führt zu einer Duplizierung, da Ihr Projekt diese Informationen auch in der AssemblyInfo.csDatei enthält. Also entferne die Datei und ich denke es sollte funktionieren.

luqi
quelle
3
Sollte der Build-Prozess also nicht die vorhandene AssemblyVersion überschreiben, anstatt einen neuen Eintrag zu erstellen? Ich weiß, dass unser Build-Prozess das tut, aber ich bin gespannt, warum er den vorhandenen nicht überschreibt. Ist es schlecht implementiert oder ist es eine Einschränkung?
Aamir
Ich denke, für .net-Assemblys wäre der bessere Weg, die Versionsinjektionsmethode zu verwenden. Aber das ist eine separate Geschichte. In Ihrem Fall besteht das Problem darin, dass es verschiedene Möglichkeiten gibt, Assemblyversionen über cmdline-Erstellungsparameter und AssemblyInfo.cs bereitzustellen. Sie müssen sicherstellen, dass nur eine Methode verwendet wird, da das Duplizieren von Attributen ein .net-Kompilierungsfehler ist.
Luqi
was genau entfernen?
Roberto Tomás
192

Ab Visual Studio 2017 besteht eine weitere Lösung, um die AssemblyInfo.csDatei weiterhin zu verwenden, darin, die automatische Generierung von Baugruppeninformationen wie folgt zu deaktivieren:

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

Ich persönlich finde es sehr nützlich für Projekte, die sowohl .NET Framework als auch .NET Standard unterstützen müssen.

Serge Semenov
quelle
4
Ja, das hat bei mir funktioniert. Das Löschen der Ordner obj und bin war nicht genug.
Nick Josevski
Leider verschwindet jedes Mal, wenn ich die .csprojDatei über ihre Eigenschaftsseiten (Anwendung, Build, Build-Ereignisse usw.) ändere , das PropertyGroupmit GenerateAssemblyInfo:-(
Palo Mraz
3
Verschieben Sie es in eine Directory.Build.props-Datei
Bryan
2
Ist mit dieser Lösung ein Risiko oder ein negatives Ergebnis möglich?
Mrcoulson
Mein Problem wurde perfekt behoben!
Daniel Maclean
19

Ich hatte den gleichen Fehler und er unterstrich die Assembly Vesrion- und Assembly File-Version. Als ich die Luqi-Antwort las, fügte ich sie nur als Kommentare hinzu und der Fehler wurde behoben

// 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
quelle
Ich habe es versucht und es hat nichts an meinem Fall geändert :-(
Gertsen
18

Beim Konvertieren eines älteren Projekts in .NET Core können die meisten Informationen in AssemblyInfo.cs jetzt im Projekt selbst festgelegt werden. Öffnen Sie die Projekteigenschaften und wählen Sie die Registerkarte Paket, um die neuen Einstellungen anzuzeigen.

Der Beitrag von Eric L. Anderson "Attribut" System.Reflection.AssemblyCompanyAttribute "duplizieren" beschreibt drei Optionen:

Michael Freidgeim
quelle
Ich finde es intuitiver und "Visual Studio", diese Attribute in project ( .csproj) anzugeben , da es sich um Metadaten anstelle von Code handelt, der die tatsächliche Logik beschreibt. Ich hoffe in Zukunft kann alles im Projekt festgelegt werden! (Derzeit kann ich die COM-Sichtbarkeit nicht angeben, daher lasse ich sie in AssemblyInfo.cs.)
Franklin Yu
9

In meinem Fall wurden einige temporäre * .cs-Dateien, die während der Kompilierung generiert wurden, versehentlich zum Projekt hinzugefügt.

Die Dateien stammten aus dem obj\DebugVerzeichnis, daher hätten sie der Lösung definitiv nicht hinzugefügt werden dürfen. Eine *.csWildcard wurde ein wenig verrückt und fügte sie falsch hinzu.

Das Löschen dieser Dateien hat das Problem behoben.

Nate Barbettini
quelle
9

In meinem Fall gab es dort einen Unterordner in einem Projekt, der selbst ein Projektordner war:

  • Dateisystem:

    • c: \ projects \ webapi \ wepapi.csproj
    • c: \ projects \ webapi \ tests \ wepapitests.csproj
  • Lösung

    • webapi (Ordner und Projekt)
      • Tests (Ordner)
    • Tests (Ordner und Projekt)

Dann musste ich den Unterordner "tests" aus dem "webapi" -Projekt entfernen.

Heringer
quelle
4

Für mich hatten AssembyInfo.cs und SolutionInfo.cs unterschiedliche Werte. Überprüfen Sie also auch diese Dateien. Ich habe gerade die Version von einem von ihnen entfernt.

Mariusz.W
quelle
3

Mein Fehler ist aufgetreten, weil irgendwie ein obj-Ordner in meinem Controller-Ordner erstellt wurde. Suchen Sie in Ihrer Anwendung einfach nach einer Zeile in Ihrer Assemblyinfo.cs. Möglicherweise ist irgendwo ein Duplikat vorhanden.

Dwayne Liebe
quelle
Ebenso hatte ich eine .csproj-Datei (A) in einem anderen Ordner, der zu einem anderen .csproj (B) gehört.
Taylorswiftfan
2

Dies passiert normalerweise bei mir, wenn ich das Projekt in Visual Studio 2017 kompiliert habe und dann versuche, es mit .NET Core mit dem Befehlszeilenbefehl "dotnet run" neu zu erstellen und auszuführen.

Durch einfaches Löschen aller Ordner "bin" und "obj" - sowohl in "ClientApp" als auch direkt im Projektordner - konnte der .NET Core-Befehl "dotnet run" erfolgreich neu erstellt und ausgeführt werden.

Wilhelm
quelle
2

Hier muss bereits eine AssemblyInfo.cs-Datei im Projekt vorhanden sein: Geben Sie hier die Bildbeschreibung ein

So lösen Sie: - Löschen Sie eine AssemblyInfo.cs

Tejas Katakdhond
quelle
1

Eine weitere Lösung beim Upgrade von Core auf VS2017 besteht darin, sie in der Datei properties \ assemblyinfo.cs zu entfernen.

Da sie jetzt im Projekt gespeichert sind.

Thomas Koelle
quelle
1

Ich bin auf dasselbe gestoßen, als ich versucht habe, das GitVersion-Tool hinzuzufügen, um meine Version in AssemblyInfo.cs zu aktualisieren. Verwenden Sie das VS2017- und .NET Core-Projekt. Also habe ich einfach beide Welten gemischt. Meine AssemblyInfo.cs enthält nur Versionsinformationen, die vom GitVersion-Tool generiert wurden. Mein csproj enthält verbleibende Dinge. Bitte beachten Sie, dass ich keine <GenerateAssemblyInfo>false</GenerateAssemblyInfo>Attribute verwende, die sich nur auf die Version beziehen (siehe unten). Weitere Details finden Sie hier in den AssemblyInfo-Eigenschaften .

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 enthält alle mit anderen Assemblyu-Attributen verbundenen Attribute:

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

csproj wird der Registerkarte "Paket" in den Projekteigenschaften zugeordnet

Alezis
quelle
1

Ich hatte dieses Problem, als sich mein Hauptprojekt im selben Ordner wie die Lösung befand, dann hatte ich ein separates Projekt in derselben Lösung in einem Unterordner, und dieses separate Projekt verwendete das Hauptprojekt als Referenz. Dies führte dazu, dass das Hauptprojekt die Unterordner bin & obj erkannte, die doppelte Verweise erstellten.

Mark Entingh
quelle
Das hat mir sehr geholfen! Ein Projekt verwies auf ein anderes als Build-Time-Abhängigkeit, aber ein Fehler im csproj führte dazu, dass die obj-Ordner unterschiedlich waren, was zu diesem Fehler führte.
Chad Jessup
0

Mein Fehler war, dass ich auch auf eine andere Datei in meinem Projekt verwies, die auch einen Wert für das Attribut "AssemblyVersion" enthielt. Ich habe dieses Attribut aus einer der Dateien entfernt und es funktioniert jetzt ordnungsgemäß.

Der Schlüssel besteht darin, sicherzustellen, dass dieser Wert in keiner Datei Ihres Projekts mehr als einmal deklariert wird.

Antoine Dijoux
quelle
0

Bearbeiten Sie AssemblyInfo.cs und #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
quelle
0

Ich habe diesen Fehler erhalten, als ich 2 Projekte in dasselbe Verzeichnis gestellt habe. Wenn ich ein Verzeichnis mit einer Lösung habe und ein separates Web- und Datenverzeichnis darin platziere, wird es richtig kompiliert.

Herman Van Der Blom
quelle
0

Wenn dieses Problem in einer Build-Pipeline unter Azure DevOps auftritt, versuchen Sie, die Build-Aktion in den AssembyInfo.cs-Dateieigenschaften als "Inhalt" und "In Ausgabeverzeichnis kopieren" gleich "Bei neuerer Version kopieren" zu setzen.

Marcello Teófilo Fonteles
quelle
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]

Ich glaube, mein Bibliotheksordner wurde durch eine versehentliche Erstellung einer anderen Klassenbibliothek beschädigt. Ich habe die Bibliothek und alle zugehörigen Dateien gelöscht, aber das Problem blieb bestehen. Ich habe eine Problemumgehung gefunden, indem ich ALLE Ordner bin und obj im Verzeichnis gelöscht habe. Der Build war zuvor in Ordnung, fand jedoch einen Unterordner mit derselben Datei "assemblyinfo.cs".

John Flurkey
quelle
0

Dieses Problem ist ein Referenzkonflikt, der VS 2017 am meisten eigen ist.

Ich habe denselben Fehler behoben, indem ich einfach die Zeilen 7 bis 14 sowie die Versionscodes der Baugruppe am Ende der Seite auf AssemblyInfo.cs auskommentiert habe

Es wurden alle doppelten Referenzen entfernt und das Projekt konnte erneut erstellt werden.

Adeakinwe
quelle