Thuộc tính trùng lặp hội đồng


146

Tôi có một dự án tạo ra lỗi sau khi biên dịch:

lỗi CS0579: Sao chép thuộc tính 'Hội đồng'

Tôi đã kiểm tra tập tin AssemblyInfo.csvà có vẻ như không có sự trùng lặp ở đó.

Tôi tìm thấy bài viết này trên MSDN giải quyết một vấn đề tương tự và làm theo gợi ý trong bài viết này cũng khắc phục vấn đề này.

Bất cứ ai có thể cho tôi biết những gì đang xảy ra ở đây? Có xảy ra chỉ trong trường hợp có hai hoặc nhiều dự án với các lớp có tên giống nhau không? Hay nó là cái gì khác?


chỉ là một phỏng đoán, nhưng bạn đã thử đóng và mở lại giải pháp chưa? có lẽ điều đó có thể giải quyết nó?
Stefto

4
Nếu chuyển đổi dự án sang .NET Core, hãy xem elanderson.net/2017/06/ Kẻ
Michael Freidgeim

Tôi đang sử dụng phiên bản Cộng đồng Visual Studio 2017 trên Mac. Tôi đã có một ứng dụng giao diện điều khiển và sau đó tôi đã thêm một tài liệu tham khảo cho một dự án thư viện lớp mới. Những lỗi này bắt đầu hiển thị khi tôi thực hiện một bản dựng. Tất cả những gì tôi đã làm là xóa tham chiếu đến dự án thư viện lớp và sau đó thêm lại và các lỗi đã biến mất.
Bọ chét

Câu trả lời:


125

Tôi cũng đã gặp phải vấn đề này trong quá khứ, vì vậy tôi sẽ giả định rằng quy trình xây dựng của bạn cung cấp thông tin lắp ráp riêng để cung cấp phiên bản. Và điều đó gây ra sự trùng lặp vì dự án của bạn cũng có thông tin đó trong AssemblyInfo.cstệp. Vì vậy, loại bỏ các tập tin và tôi nghĩ rằng nó nên làm việc.


3
Vì vậy, không nên xây dựng quy trình ghi đè Hội đồng hiện tại thay vì tạo một mục mới? Tôi biết rằng quá trình xây dựng của chúng tôi thực hiện điều đó nhưng tôi tò mò rằng tại sao nó không ghi đè lên quy trình hiện có. Là nó thực hiện xấu hay là một hạn chế?
Aamir

Tôi nghĩ rằng để lắp ráp .net cách tốt hơn là sử dụng phương pháp tiêm phiên bản. Nhưng đó là một câu chuyện riêng biệt. Trong trường hợp của bạn, vấn đề là có nhiều cách khác nhau để cung cấp các phiên bản lắp ráp, thông qua các tham số xây dựng cmdline và thông qua AssociationInfo.cs và bạn phải đảm bảo rằng chỉ có một phương thức đang được sử dụng làm sao chép các thuộc tính là lỗi biên dịch .net.
luqi

loại bỏ chính xác những gì?
roberto tomás

193

Bắt đầu từ Visual Studio 2017 một giải pháp khác để tiếp tục sử dụng AssemblyInfo.cstệp là tắt tạo thông tin lắp ráp tự động như thế này:

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

Cá nhân tôi thấy nó rất hữu ích cho các dự án cần hỗ trợ cả .NET Framework và .NET Standard.


4
Có, điều đó làm việc cho tôi, xóa các thư mục obj và bin là không đủ.
Nick Josevski

Thật không may, mỗi khi tôi thay đổi .csprojtệp bằng các trang thuộc tính của nó (Ứng dụng, Xây dựng, Xây dựng sự kiện, v.v.), PropertyGroupvới sự GenerateAssemblyInfobiến mất :-(
Palo Mraz

3
Di chuyển nó vào tệp Directory.Build.props
Bryan

2
Có bất kỳ rủi ro hoặc kết quả tiêu cực có thể với giải pháp này?
mrcoulson

Đã khắc phục sự cố của tôi một cách hoàn hảo!
Daniel Maclean

19

Tôi đã có cùng một lỗi và nó đã gạch chân Phiên bản Vesrion và Hội đồng Tập tin nên đọc câu trả lời của Luqi tôi chỉ cần thêm chúng dưới dạng nhận xét và lỗi đã được giải quyết

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

Tôi đã thử điều này và nó không thay đổi gì trong trường hợp của tôi :-(
Gertsen 17/07/19

18

Khi chuyển đổi một dự án cũ hơn sang .NET Core, hầu hết các thông tin có trong Hội nghịInfo.cs hiện có thể được đặt trên chính dự án. Mở thuộc tính dự án và chọn tab Gói để xem các cài đặt mới.

Bài đăng "Thuộc tính 'System.Reflection.AssuggingCompanyAttribution' của Eric L. Anderson mô tả 3 tùy chọn:


Tôi thấy nó trực quan hơn và "Visual Studio" hơn để chỉ định các thuộc tính này trong dự án ( .csproj), vì chúng là siêu dữ liệu thay vì mã mô tả logic thực tế. Tôi hy vọng trong tương lai mọi thứ có thể được chỉ định trong dự án! (Hiện tại tôi không thể chỉ định mức độ hiển thị của COM, vì vậy tôi để nó vào AssemblyInfo.cs.)
Franklin Yu

9

Trong trường hợp của tôi, một số tệp * .cs tạm thời được tạo trong quá trình biên dịch đã vô tình được thêm vào dự án.

Các tập tin được lấy từ obj\Debugthư mục, vì vậy chúng chắc chắn không nên được thêm vào giải pháp. Một *.cský tự đại diện đã phát điên một chút và thêm chúng không chính xác.

Xóa các tập tin này đã khắc phục vấn đề.


9

Trong trường hợp của tôi, có thư mục con trong dự án là thư mục dự án, nó tự:

  • hệ thống tập tin:

    • c: \ dự án \ webapi \ wepapi.csproj
    • c: \ dự án \ webapi \ tests \ wepapitests.csproj
  • giải pháp

    • webapi (thư mục và dự án)
      • kiểm tra (thư mục)
    • kiểm tra (thư mục và dự án)

Sau đó, tôi đã phải loại bỏ "kiểm tra" thư mục con khỏi dự án "webapi".


4

Đối với tôi, đó là AssembyInfo.cs và SolutionInfo.cs có các giá trị khác nhau. Vì vậy, kiểm tra các tập tin là tốt. Tôi chỉ gỡ bỏ phiên bản từ một trong số họ.


3

Lỗi của tôi xảy ra bởi vì, bằng cách nào đó, có một thư mục obj được tạo trong thư mục bộ điều khiển của tôi. Chỉ cần thực hiện tìm kiếm trong ứng dụng của bạn cho một dòng bên trong Associationinfo.cs của bạn. Có thể có một bản sao ở đâu đó.


Tương tự, tôi có một tệp .csproj (A) trong một thư mục khác thuộc về .csproj (B) khác.
taylorswiftfan

2

Điều này thường xảy ra với tôi nếu tôi biên dịch dự án trong Visual Studio 2017 và sau đó tôi cố gắng xây dựng lại và chạy nó với .NET Core bằng lệnh dòng lệnh "dotnet run".

Chỉ cần xóa tất cả các thư mục "bin" & "obj" - cả bên trong "ClientApp" & trực tiếp trong thư mục dự án - đã cho phép lệnh .NET Core "dotnet run" xây dựng lại và chạy thành công.


2

Phải có một tệp AssociationInfo.cs trong dự án ở đây: nhập mô tả hình ảnh ở đây

Để giải quyết: - Xóa bất kỳ một hội đồngInfo.cs


1

Một giải pháp khác khi nâng cấp lõi lên VS2017 là xóa chúng trong tệp property \ assemblyinfo.cs.

Vì bây giờ chúng được lưu trữ trong dự án.



1

Tôi đã gặp phải điều tương tự khi thử thêm công cụ GitVersion để cập nhật phiên bản của mình trong Hội nghịInfo.cs. Sử dụng dự án VS2017 và .NET Core. Vì vậy, tôi chỉ pha trộn cả hai thế giới. My AssociationInfo.cs chỉ chứa thông tin phiên bản được tạo bởi công cụ GitVersion, csproj của tôi chứa những thứ còn lại. Xin lưu ý rằng tôi không sử dụng <GenerateAssemblyInfo>false</GenerateAssemblyInfo>Tôi chỉ sử dụng các thuộc tính liên quan đến phiên bản (xem bên dưới). Thêm chi tiết tại đây Thuộc tính hộiInfo .

HộiInfo.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 chứa tất cả liên quan đến các thuộc tính lắp ráp khác:

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

csproj ánh xạ tới gói gói tại thuộc tính dự án


1

Tôi gặp vấn đề này khi dự án chính của tôi nằm trong cùng thư mục với giải pháp, sau đó tôi có một dự án riêng trong cùng một giải pháp nằm trong thư mục phụ và dự án riêng đó đã sử dụng dự án chính làm tham chiếu. Điều này khiến dự án chính phát hiện các thư mục bin & obj của thư mục con đã tạo các tham chiếu trùng lặp.


Điều này đã giúp tôi rất nhiều! Một dự án tham chiếu một dự án khác là phụ thuộc thời gian xây dựng, nhưng một lỗi trong csproj khiến các thư mục obj khác nhau, tạo ra lỗi này.
Chad Jessup

0

Lỗi của tôi là tôi cũng đã tham chiếu một tệp khác trong dự án của mình, nó cũng chứa một giá trị cho thuộc tính "Hội đồng". Tôi đã xóa thuộc tính đó khỏi một trong các tệp và nó hiện đang hoạt động bình thường.

Điều quan trọng là đảm bảo rằng giá trị này không được khai báo nhiều lần trong bất kỳ tệp nào trong dự án của bạn.


0

Chỉnh sửa cho bạn HộiInfo.cs và #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

Tôi đã gặp lỗi này khi tôi đặt 2 dự án vào cùng một thư mục. Nếu tôi có một thư mục với một giải pháp và tôi đặt một thư mục Web và Dữ liệu riêng biệt trong đó sẽ biên dịch đúng.


0

Nếu bạn đang gặp vấn đề này trong Đường ống xây dựng trên Azure DevOps, hãy thử đặt Hành động xây dựng dưới dạng "Nội dung" và Sao chép vào Thư mục đầu ra bằng "Sao chép nếu mới hơn" trong thuộc tính tệp 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]

Tôi tin rằng thư mục Thư viện của tôi đã bị hỏng do vô tình tạo ra một thư viện lớp khác. Tôi đã xóa thư viện tất cả các tệp liên quan nhưng vấn đề vẫn tồn tại. Tôi tìm thấy một cách giải quyết bằng cách xóa TẤT CẢ các thư mục bin và obj trong thư mục. Bản dựng đã ổn trước đây nhưng đã tìm thấy một thư mục con có cùng tệp assemblyinfo.cs.


0

Vấn đề này là một xung đột tham chiếu mà chủ yếu là đặc thù của VS 2017.

Tôi đã giải quyết lỗi tương tự bằng cách bình luận ra các dòng 7 -14 cũng như mã phiên bản hội ở cuối trang trên AssociationInfo.cs

Nó loại bỏ tất cả các tham chiếu trùng lặp và dự án đã có thể xây dựng lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.