c# code-analysis fxcop bcl

c# - El uso de Microsoft.Bcl.Async con Code Analysis provoca errores



code-analysis fxcop (3)

Como lo mencionó Nicole, esto ocurre porque Code Analysis / FxCop está aplicando que los nombres fuertes, incluidas las versiones, coincidan exactamente. Este comportamiento tiene sentido para .NET Framework, hasta que comience a tener en cuenta los redireccionamientos de enlace (u otras plataformas como Store, Phone y Silverlight que siempre permiten que las versiones posteriores de un ensamblaje coincidan con una versión anterior), que FxCop no respeta.

Escribí este comportamiento original en FxCop, y estaba sobre optimizado para la corrección frente al mundo real. En ese momento, no tuvimos una opción de exclusión que no fuera a través de App.Config. Sin embargo, por suerte, después de dejar el equipo, alguna persona inteligente del equipo agregó uno a través de la línea de comandos y dentro de Visual Studio.

A través de la línea de comando:

FxCopCmd.exe /assemblycomparemode:StrongNameIgnoringVersion ...

A través de Visual Studio:

  1. Haga clic con el botón derecho en el proyecto en el Explorador de soluciones y elija Descargar
  2. Haga clic con el botón derecho en el proyecto en el Explorador de soluciones y elija Editar
  3. Dentro del primer elemento <PropertyGroup> , agregue lo siguiente: <CodeAnalysisAdditionalOptions> /assemblycomparemode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions>
  4. Haga clic con el botón derecho en el proyecto en el Explorador de soluciones , elija Recargar y guardar los cambios cuando se le solicite.

Esto solo funcionará en Visual Studio 2012 y superior.

Estoy tratando de usar Microsoft.Bcl.Async y Code Analysis, pero cuando ejecuto Code Analysis me sale uno o más errores.

Estoy usando Visual Studio 2012 con la Actualización 2.

Esto es fácil para mi reproducir:

  1. Cree una nueva aplicación de consola predeterminada que apunte a .Net 4 .
  2. Haga clic derecho en References luego seleccione Manage NuGet Packages...
  3. Haga clic en Online y escriba async en el cuadro Search Online .
  4. Debería ver Async for .Net Framework 4 ... Haga clic en Install y aceptar todas las preguntas.
  5. Agregue a Main() una línea que dice: TaskEx.Delay(1000); y un using System.Threading.Tasks;
  6. Vaya a las propiedades del proyecto, sección Análisis de código y marque Enable Code Analysis on Build .
  7. Compila el programa.

Obtengo dos errores de análisis de código:

Error CA0052 Análisis de código en ejecución CA0052: No se seleccionaron objetivos. [Errores y advertencias] (Global)

CA0055 Error al ejecutar el análisis de código CA0055: No se pudo cargar ConsoleApplication2.exe. Se encontró el siguiente error al leer el módulo ''ConsoleApplication2'': No se pudo resolver la referencia del miembro: [Microsoft.Threading.Tasks, Version = 1.0.12.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a] System.Threading.TaskEx :: Delay. [Errores y advertencias] (Global)

Obtengo diferentes errores de análisis de código para otros programas de prueba. Una aplicación básica de Windows Forms que probé me da:

CA0001 Error al ejecutar Code Analysis CA0001: Se encontró el siguiente error al leer el módulo ''AsyncForNet4'': No se pudo resolver la referencia del miembro: [Microsoft.Threading.Tasks, Versión = 1.0.12.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a] System.Threading. Tareas.TaskEx :: Retraso. [Errores y advertencias] (Global)

Dos preguntas:

  1. ¿Alguien más puede reproducir este problema?
  2. ¿Alguien tiene una solución para ello?


Teniendo el mismo problema, y ​​buscando una solución. La única mención que he encontrado está en los comentarios de la publicación del blog de bcl: Microsoft.Bcl.Async es ahora estable (página 3 de comentarios) donde está la respuesta de Immo Landwerth a alguien que tiene el mismo problema;

Lo estamos investigando. A primera vista, parece un problema de unificación en la función de análisis de código estático de VS (FxCop). Hemos contactado a los propietarios de la misma. Desafortunadamente, no creo que exista una solución alternativa a la desactivación del análisis de código para esos proyectos :-(

La respuesta está fechada el 26 de abril de 2013, si ha habido alguna evolución desde entonces.

Así que por ahora supongo que las soluciones son:

  • Deshabilitar el análisis de código
  • Vuelva a TaskEx.Delay() su código para no usar TaskEx.Delay()