在C#类库中使用MATLAB MWArray.dll

我正在尝试在C#类库中使用带有Matlab .net Complier的MATLAB构建的.dll,但程序会在每次初始化MWArray.dll的对象时抛出exception,例如:

MWNumericArray m = new MWNumericArra(10,10); 

例外:

 System.TypeInitializationException was caught HResult=-2146233036 Message=The type initializer for 'MathWorks.MATLAB.NET.Arrays.MWNumericArray' threw an exception. Source=MWArray TypeName=MathWorks.MATLAB.NET.Arrays.MWNumericArray StackTrace: at MathWorks.MATLAB.NET.Arrays.MWNumericArray.op_Implicit(Double[] values) at VolCalc.Vol.CalculateVolatility(Double[] data) InnerException: System.TypeInitializationException HResult=-2146233036 Message=The type initializer for 'MathWorks.MATLAB.NET.Arrays.MWIndexArray' threw an exception. Source=MWArray TypeName=MathWorks.MATLAB.NET.Arrays.MWIndexArray StackTrace: at MathWorks.MATLAB.NET.Arrays.MWIndexArray..ctor() at MathWorks.MATLAB.NET.Arrays.MWNumericArray..ctor(Double scalar) at MathWorks.MATLAB.NET.Arrays.MWNumericArray.get__Inf() at MathWorks.MATLAB.NET.Arrays.MWNumericArray..cctor() InnerException: System.Security.SecurityException HResult=-2146233078 Message=Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. Source=MWArray StackTrace: at MathWorks.MATLAB.NET.Utility.MWSafeHandle..ctor() at MathWorks.MATLAB.NET.Arrays.MWArray..ctor() at MathWorks.MATLAB.NET.Arrays.MWIndexArray..ctor() at MathWorks.MATLAB.NET.Arrays.MWNumericArray..ctor(MWArrayComponent arrayComponent, Int32 rows, Int32 columns) at MathWorks.MATLAB.NET.Arrays.MWIndexArray..cctor() InnerException: 

我尝试在Console App中执行此操作,并且工作正常,但我需要.dll使用matlab内置的.dll。

有任何想法吗?

我正在解决同样的问题,在我看来,它似乎是.csproj文件中的内容,听起来很奇怪。

一般情况下,我建议尝试以下方法:创建一个新的Windows窗体应用程序并添加附带的代码。 不要忘记添加对MWArray.dll的引用。 运行代码,如果抛出exception,那么Matlab运行时的安装问题或运行时的x86 / x64版本与构建的应用程序不匹配。 (你表示你已经这样做了,但这是一个旨在帮助他人的一般答案)

将附带的代码添加到应用程序的program.cs中,看看它是否会引发exception。 继续前进到抛出exception的DLL,直到抛出exception。

当最终抛出exception时,validation项目的x86 / x64是否与Matlab运行时的x86 / x64匹配。

如果x86 / x64版本匹配,请创建一个具有不同类名的新DLL项目,其构造函数与失败的DLL具有相同的签名。 将附带的代码添加到新的DLL中,将失败的DLL解除连接并连接到这个新的DLL,然后运行该应用程序。 如果代码没有抛出exception,那么您可能在.csproj文件或其他DLL中遇到问题。 将失败的DLL中的代码块复制并粘贴到新的DLL中,然后重新测试exception。 继续,直到所有代码都被复制或直到exception返回。 如果exception返回,请继续进行故障排除以查找有问题的代码行。 如果所有代码都已复制,那么您将拥有一个正常运行的DLL。 您应该能够从那里获取它以摆脱失败的DLL并将其替换为新的functionDLL。

我希望这有帮助! 扎克

 using MathWorks.MATLAB.NET.Arrays; using MathWorks.MATLAB.NET.Utility; try { MWNumericArray oMW = new MWNumericArray(); } catch (Exception ex) { } 

帮助我的是确保C#应用程序和matlab模块在相同的架构下 – 意味着32位或64位。

如果你的Matlab是64位 – 尝试将C#项目更改为64位

请参阅以下文章: 在Matlab中创建共享库(.NET程序集)并在C#中使用它

所以这神奇地开始发生在Windows服务器上,几周内服务器上没有任何变化。

我的解决方案就是将网站应用程序池中的“启用32位应用程序”设置设置为FALSE 。 一旦我这样做,一切正常,我把眼球放回sockets。