2010-12-13 14 views
8

Estoy tratando de compilar una aplicación de Matlab (R2010b) que utiliza un módulo de .NET, pero yo estoy frente a un problema con la incompatibilidad entre el MCR y el módulo de .NET:MCR e incompatibilidad .NET

  • El El módulo .NET está compilado con Visual Studio 2010.
  • MCR está configurado para usar Visual Studio 2010.
  • La aplicación también contiene algunos archivos Mex que se crean con Visual Studio 2010 y funcionan bien tanto en Matlab como en con MCR.

Si se me carga el conjunto de la CLI Matlab todo funcione bien, pero una vez que compilar la aplicación y ejecutarlo desde cmd.exe se lanza un error que indica que el conjunto está construido con un tiempo de ejecución que es más reciente que el que está actualmente cargado Creo que Matlab R2010b está construido con Visual Studio 2008 y creo que este es el problema, pero me pregunto si alguien tiene una solución al problema.

+2

De http://www.mathworks.com/help/techdoc/matlab_external/brpb5k6-1.html: "La interfaz MATLAB admite las características de .NET Framework Version 2.0 y funciona con la Versión 2.0 y sus versiones compatibles (Versiones 3.0 y 3.5). MATLAB admite la carga de ensamblados Framework versión 4.0 si tiene instalada la versión 4.0 en su sistema. Sin embargo, las características específicas de la versión 4.0 no se han probado. " – Mikhail

+0

No se trata de la versión VS, pero para qué marco de destino se compilan los ensamblados. Con VS2008 y VS2010 puede compilar para todas las versiones de .NET, incluida la versión anterior. Si no está utilizando características específicas de .NET 4, entonces puede intentar compilar .NET 3.5 – Mikhail

+0

Pero el ensamblaje funciona bien si lo cargo desde el cli, así que no creo que el problema sean las características incompatibles en .NET 4.0. – trondd

Respuesta

7

La solución es proporcionar un archivo de aplicación de configuración (foo.exe.config para la aplicación llamada foo.exe) junto al exe compilado con la siguiente entrada: Interfaz .NET

<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0"/> 
    <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 

MATLAB se construye con .NET framework 2.0, lo que significa que, en ausencia de un archivo de configuración de la aplicación, se carga el CLR 2.0. Cuando se ejecuta en MATLAB, las entradas <supportedRuntime> del archivo de configuración le dicen a MATLAB que cargue 4.0 CLR, si está disponible.

+1

¡Es bueno saberlo! ¿Podría quizás proporcionar un enlace a la fuente original de esta documentación? ¿Asumo que es parte del framework .NET? – trondd

+1

@trondd Aquí está el enlace de msdn sobre supportedRuntime [link] (http://msdn.microsoft.com/en-us/library/w4atty68.aspx). useLegacyV2RuntimeActivationPolicy se ha discutido en [link] (http://stackoverflow.com/questions/1604663/what-does-uselegacyv2runtimeactivationpolicy-do-in-the-net-4-config) que es importante cuando se usa un ensamblado de modo mixto (C++/CLI) en .NET 4.0. También olvidé mencionar que MATLAB ya envía un archivo de configuración, MATLAB.exe.config en $ MATLABROOT \ bin \ $ ARCH, que es por lo que las cosas funcionan en MATLAB. – Shaf

Cuestiones relacionadas