c# .net msbuild code-analysis fxcop

c# - CS8019 Error en Assemblyinfo en el archivo temporal MSBuild Server



.net code-analysis (3)

Google para CS8019 AssemblyAttributes arrojó muchos artículos interesantes, como esta publicación de blog . Citando:

Afortunadamente para nosotros, MSBuild es lo suficientemente flexible para que podamos solucionarlo. El buen diseño es generar este archivo en el directorio intermedio (generalmente llamado obj), porque aquí es donde deben ir todos los archivos transitorios y temporales durante un proceso de compilación. Podemos establecer esta propiedad en nuestro archivo de proyecto:

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

O si su compilación usa un archivo .props común, establezca esta propiedad allí. Esto asegurará que su compilación no dependa del directorio TEMP y esté más aislada, repetible e incremental.

Recibo un error de análisis de código en mi servidor de compilación, el error es

... NETFramework, Version = v4.6.AssemblyAttributes.cs (3,1): error CS8019: Directiva de uso innecesario.

Esto se encuentra en un archivo Temp que crea Visual Studio.

En mi proyecto, he marcado " Suprimir resultados del código generado (solo gestionado) ". Pensé que eso sería suficiente.

Pero sigo recibiendo el error en el servidor y localmente no recibo ninguno.

¿Algunas ideas?


La respuesta de Michal solo ayuda parcialmente aquí. Sí, puede redirigir dónde está escrito ese archivo, pero seguirá violando la regla CS8019 .

Tienes dos opciones:

  1. TargetFrameworkMonikerAssemblyAttributeText propiedad < TargetFrameworkMonikerAssemblyAttributeText > en algo que no viole la regla. Por ejemplo:

    // &lt;autogenerated /&gt; [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(&quot;$(TargetFrameworkMoniker)&quot;, FrameworkDisplayName = &quot;$(TargetFrameworkMonikerDisplayName)&quot;)]

  2. O bien, redirija el archivo a un lugar no temporal. En mi caso, elegí escribirlo en la raíz de la solución para que todos los proyectos compartan el archivo. Luego edité manualmente el archivo para eliminar las violaciones y confié el archivo junto con el resto de mi código. El archivo no se sobrescribe si ya existe, por lo que generalmente será seguro.


  1. Solo establecer la propiedad TargetFrameworkMonikerAssemblyAttributesPath no elimina la advertencia. Reubica el archivo que genera la advertencia, que será útil.
  2. Establecer la propiedad TargetFrameworkMonikerAssemblyAttributeText no funciona. Parece que esta propiedad es sobrescrita por el objetivo que genera este archivo. (En MSBuild 14.0, la propiedad es sobrescrita por el objetivo _SetTargetFrameworkMonikerAttribute en el archivo Microsoft.CSharp.CurrentVersion.targets y luego se hace referencia a ella en el destino GenerateTargetFrameworkMonikerAttribute en el archivo Microsoft.Common.CurrentVersion.targets).
  3. (Solución de trabajo) Establecer TargetFrameworkMonikerAssemblyAttributesFileClean en false evitará que el archivo se sobrescriba si ya existe. De este modo, puede dejar que el script de compilación lo genere, corrija el using ...; líneas manualmente, guárdelo y vea que no se regenera al reconstruir. En este punto, ubicar el archivo en un camino no temporal tiene sentido.

    Agregar lo siguiente a un archivo SharedBuildScript.msbuild.xml y hacer referencia a eso dentro de los archivos de proyecto individuales garantiza que todos se refieran al mismo archivo individual:

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