Mic*_*Man 8 .net c# msbuild code-analysis fxcop
我的构建服务器上出现代码分析错误,错误是
... NETFramework,Version = v4.6.AssemblyAttributes.cs(3,1):错误CS8019:不必要的using指令.
这是Visual Studio创建的Temp文件.
在我的项目中,我有" 从生成的代码中抑制结果(仅限管理) ".我原以为这就足够了.
但我仍然得到服务器上的错误,本地我没有.
有任何想法吗?
TargetFrameworkMonikerAssemblyAttributesPath属性不会删除警告.它重定位生成警告的文件,这将证明是有用的.TargetFrameworkMonikerAssemblyAttributeText属性不起作用.该属性似乎被生成此文件的目标覆盖.(在MSBuild 14.0中,该属性被_SetTargetFrameworkMonikerAttribute文件Microsoft.CSharp.CurrentVersion.targets中的目标覆盖,稍后将GenerateTargetFrameworkMonikerAttribute在文件Microsoft.Common.CurrentVersion.targets 中的目标中引用.)(工作解决方案)将TargetFrameworkMonikerAssemblyAttributesFileCleanfalse 设置为false将阻止文件被覆盖(如果已存在).因此,您可以让构建脚本生成它,using ...;手动修复行,保存它,并在重建时看到它不会重新生成.此时,将文件放在非临时路径中是有意义的.
将以下内容添加到SharedBuildScript.msbuild.xml文件并在单个项目文件中引用该文件可确保它们都引用相同的单个文件:
<PropertyGroup>
<TargetFrameworkMonikerAssemblyAttributesFileClean>False</TargetFrameworkMonikerAssemblyAttributesFileClean>
<TargetFrameworkMonikerAssemblyAttributesPath>$(MSBuildThisFileDirectory)SharedAssemblyAttributes.cs</TargetFrameworkMonikerAssemblyAttributesPath>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)谷歌搜索CS8019 AssemblyAttributes产生了许多有趣的文章,如这篇博客文章.引用:
对我们来说幸运的是,MSBuild足够灵活,所以我们可以解决它.好的设计是将此文件生成到Intermediate目录(通常称为obj),因为这是构建过程中所有临时文件和临时文件的所在位置.我们可以在项目文件中设置此属性:
<PropertyGroup>
<TargetFrameworkMonikerAssemblyAttributesPath>$([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)'))</TargetFrameworkMonikerAssemblyAttributesPath>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
或者,如果您的构建使用公共.props文件,请在此处设置此属性.这将确保您的构建不依赖于TEMP目录,并且更加孤立,可重复和增量.