2015-10-16 44 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>