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:
- Haga clic con el botón derecho en el proyecto en el Explorador de soluciones y elija Descargar
- Haga clic con el botón derecho en el proyecto en el Explorador de soluciones y elija Editar
- Dentro del primer elemento
<PropertyGroup>
, agregue lo siguiente:<CodeAnalysisAdditionalOptions> /assemblycomparemode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions>
- 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:
- Cree una nueva aplicación de consola predeterminada que apunte a
.Net 4
. - Haga clic derecho en
References
luego seleccioneManage NuGet Packages...
- Haga clic en
Online
y escribaasync
en el cuadroSearch Online
. - Debería ver
Async for .Net Framework 4 ...
Haga clic enInstall
y aceptar todas las preguntas. - Agregue a
Main()
una línea que dice:TaskEx.Delay(1000);
y unusing System.Threading.Tasks;
- Vaya a las propiedades del proyecto, sección Análisis de código y marque
Enable Code Analysis on Build
. - 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:
- ¿Alguien más puede reproducir este problema?
- ¿Alguien tiene una solución para ello?
Esto sucede porque las versiones de las dependencias declaradas en los ensamblajes Bcl.Async no coinciden con las disponibles en el momento del análisis. La solución más simple es ajustar AssemblyReferenceResolveMode
de FxCop como se describe en http://davesbox.com/archive/2008/06/14/reference-resolutions-changes-in-code-analysis-and-fxcop-part-2.aspx .
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 usarTaskEx.Delay()