puede excepción error ensamblado cargar archivo 0x8007000b c# generics .net-4.5 anycpu

c# - error - excepción de hresult 0x8007000b)''



Comportamiento extraño del depurador con Interfaz y Genéricos en el sistema operativo de 64 bits cuando se alterna ''Preferir 32 bits'' (1)

Me he encontrado con este extraño comportamiento: cuando la configuración de mis proyectos se establece en Any CPU y Prefer 32-bit en un 64bit Windows 7 OS el programa .Net 4.5 continuación funciona como se esperaba. Sin embargo, si desactivo la Prefer 32-bit , cuando paso por el programa, puedo ver que el código nunca interviene en la implementación de la interfaz, pero tampoco produce ningún error.

Lo he destilado a su forma más simple en la siguiente aplicación de consola:

namespace BugCheck { interface IBroken { bool Broken<TValue> (TValue gen, Large large); } class Broke : IBroken { public bool Broken<TValue> (TValue gen, Large large ) { return true; } } struct Large { int a, b, c; } class Program { static void Main (string[] args) { //32bit can step in. 64bit can''t ((IBroken)new Broke()).Broken(1, new Large()); } } }

Como era de esperar, al alternar entre Prefer 32-bit el programa alternará entre los ensamblajes .net de 32 bits y los ensamblajes de 64 bits, donde funciona como se esperaba con los ensamblajes de 32 bits y se "rompe silenciosamente" con los ensamblajes de 64 bits.

Según lo sugerido por @Athari, parece estar relacionado con el tamaño de la estructura Grande.

¿Qué estoy haciendo mal que está causando este comportamiento?


Para aquellos que se encuentran con esta pregunta en busca de una solución, para citar a connect.microsoft.com/VisualStudio/Feedback/details/943122 :

Parece que está relacionado con un error corregido en .NET Framework 4.5.2. Podemos verificar que el problema está relacionado al deshabilitar la función de valor de retorno administrado. He publicado instrucciones para hacer esto en la sección "Soluciones provisionales".

Este problema es causado por el código que recopila valores de retorno. Es posible solucionar el problema deshabilitando los valores de retorno administrados.

  1. Ir a las propiedades del sistema (Win8: WinKey + X, seleccionar ''Sistema'', Win7: Abrir ''Propiedades'' desde mi computadora)
  2. Configuración avanzada del sistema
  3. Variables de entorno…
  4. Haga clic en ''Nuevo'' y agregue
    • Nombre: VSDebug_DisableManagedReturnValue
    • Valor: 1

Si la desactivación de los valores de retorno administrados soluciona el problema, la solución para este problema se encuentra en .NET Framework 4.5.2. Esto se puede descargar desde http://www.microsoft.com/en-us/download/details.aspx?id=42642 . Instalar 4.5.2 es todo lo que se necesita para solucionar el problema.