2010-12-13 17 views
8

私は、.NETモジュールを使用してMatlabの(R2010b)アプリケーションをコンパイルしようとしていますが、私はMCRおよび.NETモジュール間の非互換性に問題が直面しています:MCRおよび.NET互換性

  • .NETモジュールはVisual Studio 2010でコンパイルされます。
  • MCRはVisual Studio 2010を使用するように構成されています。
  • このアプリケーションには、Visual Studio 2010で構築されたいくつかのMexファイルも含まれています。 MCRと

私はMATLABからアセンブリをロードする場合は、すべての作業がうまくCLI、私はアプリをコンパイルしてCMD.EXEからそれを実行したら、エラーがアセンブリがより新しいランタイムを使用して構築されたことを示すスローされます現在ロードされているもの私はMatlab R2010bはVisual Studio 2008で構築されていると思うが、これは問題だと思うが、誰かが問題の解決策を持っているのだろうか?

+2

http://www.mathworks.com/help/techdoc/matlab_external/brpb5k6-1.htmlから: "MATLABインターフェイスは.NET Framework Version 2.0の機能をサポートし、Version 2.0およびその互換バージョン(バージョン3.0および3.5)MATLABは、システムにバージョン4.0がインストールされている場合、Framework 4.0アセンブリのロードをサポートしますが、バージョン4.0固有の機能はテストされていません。 – Mikhail

+0

VSバージョンではなく、どのターゲットフレームワークに対してアセンブリがコンパイルされているかです。 VS2008とVS2010の両方で、すべての.NETバージョン(古いものも含む)でコンパイルできます。特定の.NET 4機能を使用していない場合は、.NET 3.5にコンパイルできます – Mikhail

+0

しかし、cliからロードするとアセンブリがうまく動作するので、問題は.NET 4.0の互換性のない機能ではないと思います。 – trondd

答えて

7

溶液を次のエントリでexeファイルにコンパイルする次のアプリケーションの設定ファイル(FOO.EXEと呼ばれるアプリケーションのfoo.exe.config)を提供することにある。

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

MATLAB .NETインターフェイスを用いて構築されています.NET Framework 2.0は、アプリケーションの設定ファイルがない場合、2.0のCLRがロードされることを意味します。 MATLABで実行している場合、configファイルの<supportedRuntime>エントリは、利用可能であれば、4.0 CLRをロードするようにMATLABに指示します。

+1

ニース知ってて!おそらくこのドキュメントの元のソースへのリンクを提供できますか?私はそれが.NETフレームワークの一部であると仮定します。 – trondd

+1

@tronddここでは、supportedRuntime [リンク](http://msdn.microsoft.com/en-us/library/w4atty68.aspx)に関するmsdnからのリンクです。 useLegacyV2RuntimeActivationPolicyは、[リンク](http://stackoverflow.com/questions/1604663/what-does-uselegacyv2runtimeactivationpolicy-do-in-the-net-4-config)で議論されています。これは、混合モードアセンブリ(C++/CLI)を.NET 4.0にインストールします。また、MATLABには$ MATLABROOT \ bin \ $ ARCHにあるMATLAB.exe.configという設定ファイルが既に付属していることにも言及していません。 – Shaf

関連する問題