2015-10-16 16 views
8

Tôi nhận được một phân tích mã lỗi trên xây dựng máy chủ của tôi lỗi làCS8019 Lỗi trên Assemblyinfo trong hồ sơ tạm MSBuild server

... NETFramework, Version = v4.6.AssemblyAttributes.cs (3,1): lỗi CS8019: Không cần thiết khi sử dụng chỉ thị.

Đây là tệp Temp mà Visual Studio tạo.

Trong dự án của tôi, tôi đã chọn "Suppress results from generated code (managed only)". Tôi đã nghĩ rằng sẽ là đủ.

Nhưng tôi vẫn gặp lỗi trên máy chủ và cục bộ tôi không nhận được lỗi nào.

Bất kỳ ý tưởng nào?

+0

Có một vấn đề Roslyn cho https://github.com/dotnet/roslyn/issues/5162 –

Trả lời

5

Googling cho CS8019 AssemblyAttributes mang lại nhiều bài viết thú vị, chẳng hạn như this blog post. Trích dẫn:

May mắn cho chúng tôi, MSBuild đủ linh hoạt để chúng tôi có thể giải quyết. Thiết kế tốt là tạo tệp này vào thư mục Trung gian (thường được gọi là obj), bởi vì đây là nơi tất cả các tệp tạm thời và tạm thời phải đi trong quá trình xây dựng. Chúng tôi có thể thiết khách sạn này trong hồ sơ dự án của chúng tôi:

<PropertyGroup> 
    <TargetFrameworkMonikerAssemblyAttributesPath>$([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)'))</TargetFrameworkMonikerAssemblyAttributesPath> 
</PropertyGroup> 

Hoặc nếu xây dựng của bạn sử dụng một tập tin .props chung, thiết lập thuộc tính này ở đó. Điều này sẽ đảm bảo rằng bản dựng của bạn không phụ thuộc vào thư mục TEMP và bị cô lập, lặp lại và gia tăng hơn.

2

Câu trả lời của Michal chỉ giúp một phần ở đây. Có, bạn có thể chuyển hướng nơi tệp đó được viết nhưng nó vẫn vi phạm quy tắc CS8019.

Bạn có hai lựa chọn:

  1. Ngoài ra thiết lập thuộc tính <TargetFrameworkMonikerAssemblyAttributeText> một cái gì đó mà không vi phạm các quy tắc. Ví dụ:

    // &lt;autogenerated /&gt; 
    [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(&quot;$(TargetFrameworkMoniker)&quot;, FrameworkDisplayName = &quot;$(TargetFrameworkMonikerDisplayName)&quot;)] 
    
  2. Hoặc chuyển hướng tệp đến một nơi không tạm thời. Trong trường hợp của tôi, tôi đã chọn ghi nó vào thư mục gốc của giải pháp để tất cả các dự án sẽ chia sẻ tệp. Sau đó, tôi đã chỉnh sửa tệp theo cách thủ công để xóa các vi phạm và cam kết tệp cùng với phần còn lại của mã của tôi. Tệp không bị ghi đè nếu tệp đã tồn tại, vì vậy, điều này thường sẽ an toàn.

+0

Vì không ai trong số này ngăn chặn các cảnh báo, một giải pháp khác được cung cấp. –

6
  1. Chỉ thiết lập TargetFrameworkMonikerAssemblyAttributesPath sở hữu không loại bỏ các cảnh báo. Nó di chuyển các tập tin mà tạo ra các cảnh báo, mà sẽ chứng minh hữu ích.
  2. Đặt thuộc tính TargetFrameworkMonikerAssemblyAttributeText không hoạt động. Dường như thuộc tính này bị ghi đè bởi mục tiêu tạo tệp này. (Trong MSBuild 14.0, thuộc tính được ghi đè bởi mục tiêu _SetTargetFrameworkMonikerAttribute trong tệp Microsoft.CSharp.CurrentVersion.targets và sau đó được gọi trong mục tiêu GenerateTargetFrameworkMonikerAttribute trong tệp Microsoft.Common.CurrentVersion.targets.)
  3. (giải pháp làm việc) Thiết lập TargetFrameworkMonikerAssemblyAttributesFileClean false sẽ ngăn chặn các tập tin không bị ghi đè nếu nó đã tồn tại. Do đó, bạn có thể để kịch bản xây dựng tạo ra nó, sửa các dòng using ...; theo cách thủ công, lưu nó và thấy rằng nó không được tạo lại khi xây dựng lại. Tại thời điểm này, việc đặt tệp trong một đường dẫn không tạm thời có ý nghĩa.

    Thêm dòng sau vào một SharedBuildScript.msbuild.xml tập tin và đề cập đến rằng trong hồ sơ dự án cá nhân đảm bảo rằng tất cả họ đều đề cập đến cùng một tập tin duy nhất:

    <PropertyGroup> 
        <TargetFrameworkMonikerAssemblyAttributesFileClean>False</TargetFrameworkMonikerAssemblyAttributesFileClean> 
        <TargetFrameworkMonikerAssemblyAttributesPath>$(MSBuildThisFileDirectory)SharedAssemblyAttributes.cs</TargetFrameworkMonikerAssemblyAttributesPath> 
    </PropertyGroup> 
    
Các vấn đề liên quan