vslangproj80 puede error ensamblado cargar archivo c# .net portable-class-library visual-studio-2015

c# - error - No se puede cargar el ensamblado al hacer referencia a BindingFlags en la biblioteca de Windows 10 Universal Windows



no se puede cargar el archivo o ensamblado vslangproj80 dll (2)

Cuando ejecuto pruebas unitarias, invocar cualquier método en mi biblioteca portátil de tiempo de ejecución que haga referencia a "System.Reflection.TypeExtensions" genera una excepción FileNotFound, en busca de "System.Reflection.TypeExtensions". El error no ocurre cuando se ejecuta el mismo código en una aplicación universal de Windows 10.

El proyecto es una biblioteca de tiempo de ejecución portátil C #, configurada para admitir .net Framework 4.6 y Windows Universal 10.0. El proyecto de prueba está configurado para usar .net Framework 4.6.

Cada vez que intento llamar a un método que usa el tipo System.Reflection.BindingFlags, obtengo la siguiente excepción. La excepción se produce cuando se inicia la llamada (presumiblemente mientras se agita la función).

Test method Sfx.Test.SignalExpressionTest.TestAddExpressions threw exception: System.IO.FileNotFoundException: Could not load file or assembly ''System.Reflection.TypeExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'' or one of its dependencies. The system cannot find the file specified.=== Pre-bind state information === LOG: DisplayName = System.Reflection.TypeExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a (Fully-specified)


Agregar esos paquetes es lo correcto. Aquí es por qué ves este comportamiento:

  1. BindingFlags está actualmente [1] expuesto en System.Reflection.TypeExtensions .
  2. Cuando compila una biblioteca de clases .NET Core, el compilador registra la referencia de tipo como System.Reflection.TypeExtensions!System.Reflection.BindingFlags .
  3. Cuando consume la biblioteca de clases desde una aplicación .NET Framework, necesita agregar una referencia a System.Reflection.TypeExtensions contrario, el compilador no puede resolver el tipo. Lo mismo es cierto para un proyecto de pruebas unitarias que tiene que implementar todo el código para poder ejecutarlo.
  4. En tiempo de ejecución, CLR resolverá el tipo, buscará un tipo forward que apunte a mscorlib!System.Reflection.BindingFlags y felizmente ejecutará su código.

Como regla general: .NET Core está diseñado para implementar el marco de trabajo en una aplicación local, en otras palabras, cuando su aplicación se implementa en una carpeta, el cierre de todas sus dependencias debe implementarse también. Aunque los proyectos de pruebas unitarias son conceptualmente bibliotecas de clases, lo mismo se aplica porque se ejecutan como aplicaciones.

Por supuesto, no esperamos que las personas modifiquen manualmente las referencias y busquen las dependencias. Lo que actualmente ves son bits preliminares en los que no todas las piezas de nuestras experiencias de herramientas hacen lo correcto.

Dos preguntas de mi lado:

  1. ¿Qué marco de prueba de unidad usas? Supongo que es MSTest (Microsoft.VisualStudio.TestTools.UnitTesting), a diferencia de xUnit o NUnit?

  2. ¿Qué corredor estás usando? Supongo que es el Visual Studio Test Explorer incorporado (a diferencia de ReSharper o TestDriven.NET)?

[1] Digo actualmente porque, según los comentarios de los clientes, decidimos moverlo nuevamente a System.Reflection , junto con las API que toman BindingFlags .


agregar referencia a paquetes nuget:

System.Reflection System.Reflection.Extensions System.Reflection.Primitives