unit test net dotnet unit-testing visual-studio-2015 mstest

unit testing - net - Asamblea de modo mixto Fallo MSTest en VS2015



unit test.net core (1)

Al intentar ejecutar pruebas unitarias que usan ensamblajes de modo mixto en VS2015, las pruebas no se ejecutan con el mensaje habitual:

System.IO.FileLoadException: el ensamblado de modo mixto se genera con la versión ''v2.0.50727'' del tiempo de ejecución y no se puede cargar en el tiempo de ejecución 4.0 sin información de configuración adicional.

Crear un app.config y agregar useLegacyV2RuntimeActivationPolicy no tiene ningún efecto; parece que esta configuración es imposible de cambiar.

Esto anteriormente funcionaba sin pasos manuales en VS2013.


Alternativa 1: Configuración

Agregue la configuración de inicio a C:/Program Files (x86)/Microsoft Visual Studio 14.0/Common7/IDE/CommonExtensions/Microsoft/TestWindow/TE.ProcessHost.Managed.exe.config :

<startup useLegacyV2RuntimeActivationPolicy="true"> </startup>

Alternativa 2: en tiempo de ejecución

Esto puede dejar de funcionar.

Simplemente agregue esta clase al proyecto de prueba de la unidad ( fuente ):

using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] public static class RuntimePolicyHelper { [AssemblyInitialize] public static void SetPolicy(TestContext ctx) { var clrRuntimeInfo = (ICLRRuntimeInfo)RuntimeEnvironment.GetRuntimeInterfaceAsObject( Guid.Empty, typeof(ICLRRuntimeInfo).GUID); // Allow errors to propagate so as to fail the tests. clrRuntimeInfo.BindAsLegacyV2Runtime(); } [ComImport] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [Guid("BD39D1D2-BA2F-486A-89B0-B4B0CB466891")] private interface ICLRRuntimeInfo { void xGetVersionString(); void xGetRuntimeDirectory(); void xIsLoaded(); void xIsLoadable(); void xLoadErrorString(); void xLoadLibrary(); void xGetProcAddress(); void xGetInterface(); void xSetDefaultStartupFlags(); void xGetDefaultStartupFlags(); [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] void BindAsLegacyV2Runtime(); } }