2015-10-16 37 views
8

我收到我的生成服務器上的代碼分析錯誤的錯誤是CS8019錯誤的臨時文件的MSBuild服務器上

... NETFramework,版本= v4.6.AssemblyAttributes.cs(3,1 ):錯誤CS8019:不必要的使用指令。

這是在Visual Studio創建的Temp文件中。

在我的項目中,我有「Suppress results from generated code (managed only)」打勾。我原以爲這就夠了。

但我仍然得到服務器上的錯誤,本地我沒有得到任何。

任何想法?

+0

有一個羅斯林的問題這個https://github.com/dotnet/roslyn/issues/5162 –

回答

5

使用谷歌搜索CS8019 AssemblyAttributes產生了許多有趣的文章,如this blog post。引用:

幸運的是,MSBuild非常靈活,所以我們可以解決它。好的設計是將該文件生成到中間目錄(通常稱爲obj),因爲這是所有臨時和臨時文件在構建過程中應該去的地方。我們可以設置該屬性在我們的項目文件:

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

或者,如果你的構建採用了常見的.props文件,設置該屬性存在。這將確保您的構建不依賴於TEMP目錄,並且更加獨立,可重複和增量。

2

Michal的回答在這裏只有部分幫助。是的,您可以重定向該文件的寫入位置,但仍會違反CS8019規則。

你有兩個選擇:

  1. 還設置<TargetFrameworkMonikerAssemblyAttributeText>屬性的東西,不違反規則。例如:

    // &lt;autogenerated /&gt; 
    [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(&quot;$(TargetFrameworkMoniker)&quot;, FrameworkDisplayName = &quot;$(TargetFrameworkMonikerDisplayName)&quot;)] 
    
  2. 或者,將文件重定向到某個不是臨時的位置。在我的情況下,我選擇將其寫入解決方案根目錄,以便所有項目共享文件。然後,我手動編輯該文件以刪除違規行爲,並將該文件與我的其他代碼一起提交。如果文件已經存在,文件不會被覆蓋,所以這通常是安全的。

+0

由於這些都沒有壓制警告,所以提供了另一種解決方案。 –

6
  1. 只有設置TargetFrameworkMonikerAssemblyAttributesPath屬性不會刪除警告。它重新定位生成警告的文件,這將證明是有用的。
  2. 設置TargetFrameworkMonikerAssemblyAttributeText屬性不起作用。看起來這個屬性被生成這個文件的目標覆蓋。 (在MSBuild 14.0中,文件Microsoft.CSharp.CurrentVersion.targets中的目標_SetTargetFrameworkMonikerAttribute將覆蓋該屬性,稍後將在文件Microsoft.Common.CurrentVersion.targets中的目標GenerateTargetFrameworkMonikerAttribute中引用該屬性。)
  3. (工作液)設置TargetFrameworkMonikerAssemblyAttributesFileClean爲false將防止文件如果它已經存在被覆蓋。因此,您可以讓構建腳本生成它,手動修復using ...;行,保存並在重建時查看它不會被重新生成。此時,將文件放在非臨時路徑中是有道理的。

    添加以下到SharedBuildScript.msbuild.xml文件和各項目文件中提到,以確保它們都指向同一個單一文件:

    <PropertyGroup> 
        <TargetFrameworkMonikerAssemblyAttributesFileClean>False</TargetFrameworkMonikerAssemblyAttributesFileClean> 
        <TargetFrameworkMonikerAssemblyAttributesPath>$(MSBuildThisFileDirectory)SharedAssemblyAttributes.cs</TargetFrameworkMonikerAssemblyAttributesPath> 
    </PropertyGroup>