Tekrarlanan AssemblySürümü Özelliği


147

Derleme aşağıdaki hata üreten bir proje var:

hata CS0579: Yinelenen 'AssemblyVersion' özniteliği

Dosyayı kontrol ettim AssemblyInfo.csve orada çoğaltma yok gibi görünüyor.

Benzer bir sorunu gideren MSDN'de bu makaleyi buldum ve bu makaledeki önerileri izleyerek de sorunu giderir.

Birisi bana neler olduğunu anlatabilir mi? Sadece benzer isimlere sahip sınıfları olan iki veya daha fazla projeniz olması durumunda mı oluyor? Yoksa başka bir şey mi?


sadece bir tahminde bulunmaya çalıştınız ama çözümü tekrar açmayı denediniz mi? belki bu çözebilir?
Stefto

4
Bir projeyi .NET Core'a dönüştürüyorsanız, bkz. Elanderson.net/2017/06/…
Michael Freidgeim

Mac'te Visual Studio 2017 Community sürümünü kullanıyorum. Bir konsol uygulamam vardı ve sonra yeni bir sınıf kitaplığı projesine bir başvuru ekledim. Bir derleme yaptığımda bu hatalar ortaya çıkmaya başladı. Tüm yaptığım sınıf kitaplığı projesine referans kaldırmak ve sonra geri eklemek ve hatalar gitti.
Pire

Yanıtlar:


127

Ayrıca geçmişte bu sorunla karşılaştım, bu yüzden derleme sürecinin sürüm bilgilerini sağlamak için ayrı montaj bilgileri sağladığını varsayacağım. Projenizde AssemblyInfo.csdosyada da bu bilgi olduğu için bu bir çoğaltmaya neden olur . Yani dosyayı kaldırın ve çalışması gerektiğini düşünüyorum.


3
Peki, derleme işlemi yeni bir giriş oluşturmak yerine mevcut AssemblyVersion'un üzerine yazmamalı mı? Yapım sürecimizin bunu yaptığını biliyorum ama neden var olanın üzerine yazmadığını merak ediyorum. Kötü bir şekilde uygulanmış mı yoksa bir sınırlama mı?
Aamir

.Net derlemeleri için en iyi yol sürüm enjeksiyon yöntemini kullanmak olacağını düşünüyorum. Ama bu ayrı bir hikaye. Sizin durumunuzda sorun, cmdline derleme parametreleri ve AssemblyInfo.cs aracılığıyla derleme sürümleri sağlamanın farklı yolları vardır ve özniteliklerin çoğaltılması için yalnızca bir yöntemin kullanıldığından emin olmanız gerekir. Net derleme hatası.
luqi

tam olarak ne kaldırılır?
roberto tomás

193

Visual Studio 2017'den başlayarak AssemblyInfo.csdosyayı kullanmaya devam etmek için başka bir çözüm, otomatik montaj bilgisi oluşturmayı şu şekilde kapatmaktır:

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

Şahsen hem .NET Framework'ü hem de .NET Standard'ı desteklemesi gereken projeler için çok yararlı buluyorum.


4
Evet, benim için işe yaradı, obj ve bin klasörlerini silmek yeterli değildi.
Nick Josevski

Ne yazık ki, her zaman değiştirmek .csprojonun mülkiyet sayfalarını (Uygulama, Yapı, Yapı Olaylar, vs.), kullanarak dosyayı PropertyGroupile GenerateAssemblyInfokaybolana :-(
Palo Mraz

3
Bir Directory.Build.props dosyasına taşıyın
Bryan

2
Bu çözümle ilgili herhangi bir risk veya olumsuz sonuç var mı?
mrcoulson

Sorunumu mükemmel şekilde düzelttim!
Daniel Maclean

19

Aynı hatayla karşılaştım ve Meclis Vesrion ve Meclis Dosya Sürümünün altını çiziyordu, bu yüzden Luqi cevabını okurken onları yorum olarak ekledim ve hata çözüldü

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

Bunu denedim ve durumumda hiçbir şey değişmedi :-(
Gertsen

18

Eski bir projeyi .NET Core'a dönüştürürken, AssemblyInfo.cs dosyasındaki bilgilerin çoğu artık projenin kendisinde ayarlanabilir. Proje özelliklerini açın ve yeni ayarları görmek için Paket sekmesini seçin.

Eric L. Anderson sonrası "yinelenen 'System.Reflection.AssemblyCompanyAttribute' özelliği" 3 seçenekler açıklanmaktadır:


Ben daha sezgisel ve daha "Visual Studio" bu öznitelikleri belirtmek için Project ( .csproj), çünkü onlar gerçek mantığı açıklayan kod yerine meta veri. Umarım gelecekte her şey projede belirtilebilir! (Şu anda COM görünürlüğünü belirleyemiyorum, bu yüzden onu bırakıyorum AssemblyInfo.cs.)
Franklin Yu

9

Benim durumumda, derleme sırasında oluşturulan bazı geçici * .cs dosyaları yanlışlıkla projeye eklendi.

Dosyalar obj\Debugdizinden, bu yüzden kesinlikle çözüme eklenmemeliydi. Bir *.csjoker karakter biraz çıldırdı ve yanlış ekledi.

Bu dosyaların silinmesi sorunu çözdü.


9

Benim durumumda, orada bir proje klasörü olan bir projede bir alt klasör kendini:

  • dosya sistemi:

    • c: \ projelerin \ WebAPI \ wepapi.csproj
    • c: \ projeler \ WebAPI \ testler \ wepapitests.csproj
  • çözüm

    • webapi (klasör ve proje)
      • testler (klasör)
    • testler (klasör ve proje)

Sonra "webapi" projesinden alt klasör "testleri" kaldırmak zorunda kaldı.


4

Benim için AssembyInfo.cs ve SolutionInfo.cs değerleri farklıydı. Bu dosyaları da kontrol edin. Sadece bir tanesinden kaldırdım.


3

Benim hatam, bir şekilde, denetleyicilerim klasörünün içinde oluşturulmuş bir obj klasörü olduğu için oluştu. Assemblyinfo.cs içinde bir satır için başvurunuzda bir arama yapmanız yeterlidir. Bir yerde bir kopya olabilir.


Benzer şekilde, başka bir .csproj'a (B) ait başka bir klasörün içinde bir .csproj dosyası (A) vardı.
taylorswiftfan

2

Projeyi Visual Studio 2017'de derlediysem ve genellikle yeniden oluşturup .NET Core ile "dotnet run" komut satırı komutu ile çalıştırmayı denersem bu benim için olur.

Tüm "bin" ve "obj" klasörlerini - hem "ClientApp" içinde, hem de doğrudan proje klasöründe - silmek, "dotnet run" .NET Core komutunun başarılı bir şekilde yeniden oluşturulmasına ve çalıştırılmasına izin verdi.


2

Burada projede bir AssemblyInfo.cs dosyası olması gerekir: resim açıklamasını buraya girin

Çözmek için: - Herhangi birini AssemblyInfo.cs silin


1

Çekirdeği VS2017'ye yükseltirken başka bir çözüm bunları properties \ assemblyinfo.cs dosyasında kaldırmaktır.

Şimdi projede saklandığından beri.



1

AssemblyInfo.cs sürümümü güncellemek için GitVersion aracını eklemeyi denediğimde aynı rastladım. VS2017 ve .NET Core projelerini kullanın. Bu yüzden her iki dünyayı da karıştırdım. AssemblyInfo.cs yalnızca GitVersion aracı tarafından oluşturulan sürüm bilgilerini içerir, csproj'umda kalan şeyler var. <GenerateAssemblyInfo>false</GenerateAssemblyInfo>Sadece sürümle ilgili öznitelikleri kullanmadığımı lütfen unutmayın (aşağıya bakın). Daha fazla ayrıntı burada AssemblyInfo özellikleri .

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 diğer birleştirme özellikleriyle ilgili tüm bilgileri içerir:

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

csproj proje özelliklerinde paket sekmesine eşlenir


1

Ana projem çözümle aynı klasördeyken bu sorunu yaşadım, daha sonra bir alt klasörde bulunan aynı çözümde ayrı bir projem vardı ve bu ayrı proje ana projeyi referans olarak kullandı. Bu, ana projenin yinelenen başvurular oluşturan alt klasör bin ve obj klasörlerini algılamasına neden oldu.


Bu bana çok yardımcı oldu! Bir proje diğerine derleme zamanı bağımlılığı olarak başvurdu, ancak csproj'daki bir hata obj klasörlerinin farklı olmasına neden olarak bu hatayı oluşturdu.
Chad Jessup

0

Benim hatam da projemde "AssemblyVersion" özniteliği için bir değer içeren başka bir dosyaya atıfta bulunuyordu. Bu özniteliği bir dosyadan kaldırdım ve şimdi düzgün çalışıyor.

Anahtar, bu değerin projenizdeki herhangi bir dosyada birden fazla bildirilmediğinden emin olmaktır.


0

AssemblyInfo.cs ve #if! NETCOREAPP3_0 ... #endif'i düzenleyin

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

Aynı dizine 2 proje koyduğumda bu hatayı aldım. Bir çözüm ile bir dizin varsa ve içine derler ayrı bir Web ve Veri dizini koymak doğru.


0

Azure DevOps üzerinde bir Build Pipeline'da bu sorunu yaşıyorsanız, Derleme Eylemini "İçerik" ve Çıktı Dizine Kopyala öğelerini AssembyInfo.cs dosya özelliklerinde "Daha yeniyse kopyala" değerine koymayı deneyin.


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]

Kütüphane klasörünün başka bir sınıf kütüphanesinin yanlışlıkla oluşturulması nedeniyle bozulduğuna inanıyorum. Kütüphaneyi tüm ilişkili bir dosyayı sildim, ancak sorun devam etti. Dizindeki TÜM bin ve obj klasörlerini silerek bir çözüm buldum. Derleme daha önce iyiydi ama aynı assemblyinfo.cs dosyasına sahip bir alt klasör buldu.


0

Bu sorun çoğunlukla VS 2017'ye özgü bir referans çatışmasıdır.

Aynı hatayı Assembly14.cs üzerinde sayfanın altındaki 7-14 satırları ve Montaj sürüm kodlarını yorumlayarak çözdüm.

Tüm yinelenen referansları kaldırdı ve proje yeniden inşa edebildi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.