2010-12-13 13 views
8

Sto cercando di compilare un'applicazione Matlab (R2010b) che utilizza un modulo .NET, ma sto affrontando un problema con incompatibilità tra l'MCR e il modulo .NET:MCR e .NET incompatibilità

  • Il Il modulo .NET è compilato con Visual Studio 2010.
  • MCR è configurato per utilizzare Visual Studio 2010.
  • L'applicazione contiene anche alcuni file Mex creati con Visual Studio 2010 e funzionano perfettamente entrambi in Matlab e con MCR.

Se carico il gruppo dal Matlab Cli funzionare tutto bene, ma una volta che compilo l'applicazione ed eseguirlo da cmd.exe viene generato un errore che indica che il gruppo è costruito con un runtime che è più recente quello attualmente caricato. Penso che Matlab R2010b sia stato realizzato con Visual Studio 2008 e ritengo che questo sia il problema, ma mi chiedo se qualcuno ha una soluzione al problema?

+2

Da http://www.mathworks.com/help/techdoc/matlab_external/brpb5k6-1.html: "L'interfaccia MATLAB supporta le funzionalità di .NET Framework versione 2.0 e funziona con la versione 2.0 e le sue versioni compatibili (Versioni 3.0 e 3.5) MATLAB supporta il caricamento degli assembly di Framework versione 4.0 se nel sistema è installata la versione 4.0. Tuttavia, le funzionalità specifiche della versione 4.0 non sono state testate. " – Mikhail

+0

Non si tratta della versione VS ma per il quale il framework di destinazione è compilato. Con VS2008 e VS2010 è possibile compilare tutte le versioni .NET, inclusa quella meno recente. Se non si utilizzano specifiche funzionalità .NET 4, è possibile provare a compilare .NET 3.5 – Mikhail

+0

ma l'assembly funziona correttamente se lo carico dal cli, quindi non penso che il problema sia incompatibile in .NET 4.0. – trondd

risposta

7

La soluzione è quella di fornire un file di configurazione dell'applicazione (foo.exe.config per un'applicazione chiamata foo.exe) accanto alla exe compilato con la seguente voce: interfaccia

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

MATLAB .NET è costruito con .NET Framework 2.0, il che significa che in assenza di un file di configurazione dell'app viene caricato il CLR 2.0. Quando si esegue in MATLAB le voci <supportedRuntime> dal file di configurazione indicano a MATLAB di caricare 4.0 CLR se disponibile.

+1

Bello sapere! Potresti forse fornire un link alla fonte originale di questa documentazione? Presumo che faccia parte del framework .NET? – trondd

+1

@trondd Ecco il link da msdn su supportedRuntime [collegamento] (http://msdn.microsoft.com/en-us/library/w4atty68.aspx). useLegacyV2RuntimeActivationPolicy è stato discusso in [collegamento] (http://stackoverflow.com/questions/1604663/what-does-uselegacyv2runtimeactivationpolicy-do-in-the-net-4-config) che è importante quando si utilizza un assembly in modalità mista (C++/CLI) in .NET 4.0. Ho anche dimenticato di menzionare che MATLAB spedisce già un file di configurazione, MATLAB.exe.config in $ MATLABROOT \ bin \ $ ARCH, motivo per cui le cose funzionano in MATLAB. – Shaf

Problemi correlati