Atribut Duplicate AssemblyVersion

147

Saya punya proyek yang menghasilkan kesalahan berikut pada kompilasi:

kesalahan CS0579: Atribut Duplicate 'AssemblyVersion'

Saya telah memeriksa file AssemblyInfo.csdan sepertinya tidak ada duplikasi di sana.

Saya menemukan artikel ini di MSDN yang membahas masalah yang sama dan mengikuti saran dalam artikel ini untuk memperbaiki masalah.

Adakah yang bisa memberi tahu saya apa yang terjadi di sini? Apakah itu terjadi hanya jika memiliki dua proyek atau lebih dengan kelas yang memiliki nama serupa? Atau itu sesuatu yang lain?

Aamir
sumber
hanya tebakan tetapi, apakah Anda mencoba menutup dan membuka solusi lagi? mungkin itu bisa menyelesaikannya?
Stefto
4
Jika mengonversi proyek ke .NET Core, lihat elanderson.net/2017/06/…
Michael Freidgeim
Saya menggunakan edisi Visual Studio 2017 Community di Mac. Saya memiliki aplikasi konsol dan kemudian saya menambahkan referensi ke proyek perpustakaan kelas baru. Kesalahan ini mulai muncul ketika saya membangun. Yang saya lakukan adalah menghapus referensi ke proyek perpustakaan kelas dan kemudian menambahkannya kembali dan kesalahan hilang.
Flea

Jawaban:

126

Saya juga pernah mengalami masalah ini di masa lalu, jadi saya akan berasumsi bahwa proses pembuatan Anda menyediakan informasi perakitan secara terpisah untuk menyediakan versi. Dan itu menyebabkan duplikasi karena proyek Anda juga memiliki info itu di AssemblyInfo.csfile. Jadi hapus file dan saya pikir itu harus berfungsi.

luqi
sumber
3
Jadi, bukankah seharusnya proses membangun menimpa AssemblyVersion yang ada alih-alih membuat entri baru? Saya tahu bahwa proses build kami melakukan itu, tetapi saya ingin tahu mengapa itu tidak menimpa yang sudah ada. Apakah itu diterapkan dengan buruk atau apakah itu suatu batasan?
Aamir
Saya pikir untuk. Net perakitan cara yang lebih baik adalah dengan menggunakan metode injeksi versi. Tapi itu cerita yang terpisah. Dalam kasus Anda masalahnya adalah ada berbagai cara untuk menyediakan versi assembly, melalui parameter build cmdline dan melalui AssemblyInfo.cs dan Anda harus memastikan bahwa hanya satu metode yang digunakan karena duplikasi atribut adalah kesalahan kompilasi .net.
luqi
hapus apa sebenarnya?
roberto tomás
193

Mulai dari Visual Studio 2017 solusi lain untuk tetap menggunakan AssemblyInfo.csfile adalah mematikan generasi info perakitan otomatis seperti ini:

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

Saya pribadi merasa sangat berguna untuk proyek-proyek yang perlu mendukung .NET Framework dan .NET Standard.

Serge Semenov
sumber
4
Ya itu berhasil bagi saya, menghapus folder obj dan bin tidak cukup.
Nick Josevski
Sayangnya, setiap kali saya mengubah .csprojfile menggunakan halaman propertinya (Aplikasi, Build, Build Events, dll.), PropertyGroupDengan GenerateAssemblyInfomenghilang :-(
Palo Mraz
3
Pindahkan ke file Directory.Build.props
Bryan
2
Apakah ada risiko atau hasil negatif yang mungkin terjadi dengan solusi ini?
mrcoulson
Atasi masalah saya dengan sempurna!
Daniel Maclean
19

Saya memiliki kesalahan yang sama dan itu menggarisbawahi Assembly Vesrion dan Assembly File Version sehingga membaca jawaban Luqi. Saya hanya menambahkannya sebagai komentar dan kesalahan diselesaikan

// 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
sumber
Saya mencoba ini, dan itu tidak mengubah apa pun dalam kasus saya :-(
Gertsen
18

Saat mengonversi proyek yang lebih lama ke .NET Core, sebagian besar informasi yang ada di AssemblyInfo.cs sekarang dapat disetel pada proyek itu sendiri. Buka properti proyek dan pilih tab Paket untuk melihat pengaturan baru.

The Eric L. Anderson post "Duplikat 'System.Reflection.AssemblyCompanyAttribute' atribut" menggambarkan 3 pilihan:

  • menghapus item yang bertentangan dari file AssemblyInfo.cs,
  • sepenuhnya menghapus file atau
  • nonaktifkan GenerateAssemblyInfo (seperti yang disarankan dalam jawaban lain oleh Serge Semenov )
Michael Freidgeim
sumber
Saya merasa lebih intuitif dan lebih banyak "Visual Studio" untuk menentukan atribut-atribut ini dalam proyek ( .csproj), karena mereka metadata bukan kode yang menggambarkan logika aktual. Saya berharap di masa depan semuanya dapat ditentukan dalam proyek! (Saat ini saya tidak dapat menentukan visibilitas COM, jadi saya meninggalkannya AssemblyInfo.cs.)
Franklin Yu
9

Dalam kasus saya, beberapa file * .cs sementara yang dihasilkan selama kompilasi secara tidak sengaja ditambahkan ke proyek.

File-file itu dari obj\Debugdirektori, jadi mereka seharusnya tidak ditambahkan ke solusi. Sebuah *.cswildcard pergi sedikit gila dan menambahkan mereka tidak benar.

Menghapus file-file ini memperbaiki masalahnya.

Nate Barbettini
sumber
9

Dalam kasus saya, di mana subfolder dalam proyek yang merupakan folder proyek itu sendiri:

  • berkas sistem:

    • c: \ proyek \ webapi \ wepapi.csproj
    • c: \ proyek \ webapi \ tes \ wepapitests.csproj
  • larutan

    • webapi (folder dan proyek)
      • tes (folder)
    • tes (folder dan proyek)

Kemudian saya harus menghapus subfolder "tes" dari proyek "webapi".

heringer
sumber
4

Bagi saya itu adalah AssembyInfo.cs dan SolutionInfo.cs memiliki nilai yang berbeda. Jadi periksa file-file ini juga. Saya baru saja menghapus versi dari salah satunya.

Mariusz.W
sumber
3

Kesalahan saya terjadi karena, entah bagaimana, ada folder obj yang dibuat di dalam folder controller saya. Lakukan saja pencarian di aplikasi Anda untuk sebuah baris di dalam Assemblyinfo.cs Anda. Mungkin ada duplikat di suatu tempat.

Dwayne Love
sumber
Demikian pula, saya memiliki file .csproj (A) di dalam folder lain milik .csproj (B) lainnya.
taylorswiftfan
2

Ini biasanya terjadi pada saya jika saya mengkompilasi proyek di Visual Studio 2017 & kemudian saya mencoba untuk membangun kembali & menjalankannya dengan .NET Core dengan perintah baris perintah "dotnet run".

Cukup menghapus semua folder "bin" & "obj" - keduanya di dalam "ClientApp" & langsung di folder proyek - memungkinkan perintah .NET Core "dotnet run" untuk membangun kembali & menjalankan dengan sukses.

William
sumber
2

Harus ada file AssemblyInfo.cs di proyek di sini: masukkan deskripsi gambar di sini

Untuk mengatasi: - Hapus satu AssemblyInfo.cs

Tejas Katakdhond
sumber
1

Namun solusi lain ketika memutakhirkan inti ke VS2017 adalah menghapusnya di file properties \ assemblyinfo.cs.

Karena mereka sekarang disimpan dalam proyek.

Thomas Koelle
sumber
1

Saya menemukan hal yang sama ketika mencoba menambahkan alat GitVersion untuk memperbarui versi saya di AssemblyInfo.cs. Gunakan proyek VS2017 dan .NET Core. Jadi saya hanya mencampurkan kedua dunia. AssemblyInfo.cs saya hanya berisi info versi yang dihasilkan oleh alat GitVersion, csproj saya berisi hal-hal remaingin. Harap dicatat saya tidak menggunakan <GenerateAssemblyInfo>false</GenerateAssemblyInfo>saya menggunakan atribut yang terkait dengan versi saja (lihat di bawah). Lebih detail di sini properti 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 berisi semua yang terkait dengan atribut assemblyu lainnya:

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

peta csproj ke paket tab di properti proyek

Alezis
sumber
1

Saya mengalami masalah ini ketika proyek utama saya berada di folder yang sama dengan solusinya, kemudian saya memiliki proyek terpisah dalam solusi yang sama yang terletak di sub folder, dan proyek terpisah itu menggunakan proyek utama sebagai referensi. Hal ini menyebabkan proyek utama mendeteksi folder & folder sub folder yang membuat referensi rangkap.

Tandai Entingh
sumber
Ini banyak membantu saya! Satu proyek merujuk yang lain sebagai dependensi build-time, tetapi bug di csproj menyebabkan folder obj berbeda, menghasilkan kesalahan ini.
Chad Jessup
0

Kesalahan saya adalah bahwa saya juga mereferensikan file lain dalam proyek saya, yang juga mengandung nilai untuk atribut "AssemblyVersion". Saya menghapus atribut itu dari salah satu file dan sekarang berfungsi dengan benar.

Kuncinya adalah memastikan bahwa nilai ini tidak dinyatakan lebih dari satu kali dalam file apa pun di proyek Anda.

Antoine Dijoux
sumber
0

Edit Anda AssemblyInfo.cs dan #jika! 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
sumber
0

Saya mendapatkan kesalahan ini ketika saya menempatkan 2 proyek di direktori yang sama. Jika saya memiliki direktori dengan solusi dan saya meletakkan direktori Web dan Data yang terpisah di dalamnya mengkompilasi dengan benar.

Herman Van Der Blom
sumber
0

Jika Anda mengalami masalah ini di Build Pipeline di Azure DevOps, coba letakkan Build Action sebagai "Konten" dan Salin ke Direktori Output sama dengan "Salin jika baru" di properti file AssembyInfo.cs.

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

Saya percaya folder Perpustakaan saya rusak oleh pembuatan perpustakaan kelas lain yang tidak sengaja. Saya menghapus semua file terkait perpustakaan tetapi masalah tetap ada. Saya menemukan solusinya dengan menghapus SEMUA folder bin dan obj di direktori. Bangunnya ok sebelumnya tetapi menemukan subfolder yang memiliki file assemblyinfo.cs yang sama.

John Flurkey
sumber
0

Masalah ini adalah konflik referensi yang sebagian besar khas untuk VS 2017.

Saya memecahkan kesalahan yang sama ini dengan hanya mengomentari baris 7 -14 serta kode versi Majelis di bagian bawah halaman di AssemblyInfo.cs

Itu menghapus semua referensi duplikat dan proyek dapat membangun lagi.

Adweinwe
sumber