CS8019临时文件MSBuild Server上的Assemblyinfo出错

我的构建服务器上出现代码分析错误,错误是

… NETFramework,Version = v4.6.AssemblyAttributes.cs(3,1):错误CS8019:不必要的using指令。

这是Visual Studio创建的Temp文件。

在我的项目中,我有“ 从生成的代码中抑制结果(仅限管理) ”。 我原以为这就足够了。

但我仍然得到服务器上的错误,本地我没有。

有任何想法吗?

谷歌搜索CS8019 AssemblyAttributes产生了许多有趣的文章,如这篇博客文章 。 引用:

对我们来说幸运的是,MSBuild足够灵活,所以我们可以解决它。 好的设计是将此文件生成到Intermediate目录(通常称为obj),因为这是构建过程中所有临时文件和临时文件的位置。 我们可以在项目文件中设置此属性:

 $([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)'))  

或者,如果您的构建使用公共.props文件,请在此处设置此属性。 这将确保您的构建不依赖于TEMP目录,并且更加孤立,可重复和增量。

  1. 仅设置TargetFrameworkMonikerAssemblyAttributesPath属性不会删除警告。 它重定位生成警告的文件,这将certificate是有用的。
  2. 设置TargetFrameworkMonikerAssemblyAttributeText属性不起作用。 该属性似乎被生成此文件的目标覆盖。 (在MSBuild 14.0中,该属性被文件Microsoft.CSharp.CurrentVersion.targets中的目标_SetTargetFrameworkMonikerAttribute覆盖,稍后将在文件Microsoft.Common.CurrentVersion.targets中的目标GenerateTargetFrameworkMonikerAttribute中引用。)
  3. (工作解决方案)TargetFrameworkMonikerAssemblyAttributesFileClean设置为false将阻止文件被覆盖(如果文件已存在)。 因此,您可以让构建脚本生成它,修复using ...; 手动删除它,并在重建时看到它没有重新生成。 此时,将文件放在非临时路径中是有意义的。

    将以下内容添加到SharedBuildScript.msbuild.xml文件并在单个项目文件中引用它可确保它们都引用相同的单个文件:

      False $(MSBuildThisFileDirectory)SharedAssemblyAttributes.cs  

Michal的答案在这里只是部分有帮助。 是的,您可以重定向该文件的写入位置,但仍然违反CS8019规则。

你有两个选择:

  1. 还要将< TargetFrameworkMonikerAssemblyAttributeText >属性设置为不违反规则的内容。 例如:

     // <autogenerated /> [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute("$(TargetFrameworkMoniker)", FrameworkDisplayName = "$(TargetFrameworkMonikerDisplayName)")] 
  2. 或者,将文件重定向到某个地方而不是临时的。 在我的情况下,我选择将其写入解决方案根目录,以便所有项目共享该文件。 然后,我手动编辑该文件以删除违规,并将该文件与其余代码一起提交。 如果文件已经存在,则不会被覆盖,因此通常是安全的。