在.net 4.5项目中使用.net 2.0 dll(vshost在调试时崩溃)

米歇兰达拉

我正在尝试使用通过dotnetbuilder(http://www.mathworks.se/help/dotnetbuilder/ug/create-a-net-component-from-matlab-code.html从matlab创建的dll文件

为了使用该dll,我必须添加对名为“ MWArray.dll”的matlab dll的引用(http://www.mathworks.se/help/dotnetbuilder/ug/integrate-your-net-component-in- ac-application.html),遗憾的是,该dll似乎仅适用于.net 2.0。

我能够使一个简单的控制台应用程序与我从matlab创建的dll一起工作的唯一方法是执行以下操作:

  • 在使用dotnetbuilder在matlab中构建.net 2.0的dll时,将其目标为
  • 将控制台应用程序中使用的.net版本更改为版本2.0

如果我不这样做,则当我尝试运行项目时,控制台应用程序将崩溃vshost.exe。

我希望能够使用.net 4. +功能,因此将项目配置为使用.net 2.0是不可接受的。.当我使这个简单的控制台应用程序至少以.net 4.0运行时,我将尝试获取它。也可以在F#3.0应用程序中工作。

我的程序如下所示:

...
using MathWorks.MATLAB.NET.Arrays;
using makesquare;

namespace Matlabski
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var stuff = new makesquare.MLTestClass();
                var res = stuff.makesquare(1, 3);
                Console.WriteLine(res[0]);
                Console.WriteLine("sdfsdf");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            Console.ReadKey();
        }
    }
}

并且我尝试编辑app.config文件以能够同时处理.net 2和4:

<?xml version="1.0"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
    <supportedRuntime version="v2.0"/>
  </startup>
</configuration>

但这不起作用..

是否可以将项目设置为可以同时使用.net 2.0和4.5,这将使我的项目正常工作吗?还是我必须做其他事情才能使用此烦人的.net 2.0 dll ..?

我在用:

  • VS2013
  • MATLAB R2013b(64位)
米歇兰达拉

解决了问题!

我编译了针对.net 4的matlab函数...然后添加了

[assembly: MathWorks.MATLAB.NET.Utility.MWMCROption("-nojit")] 

到代码。

结果代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MathWorks.MATLAB.NET.Arrays;
using makesquare;
[assembly: MathWorks.MATLAB.NET.Utility.MWMCROption("-nojit")] 

namespace Matlabski
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                MLTestClass stuff = new MLTestClass();
                object[] res = stuff.makesquare(1, 3);
                Console.WriteLine(res[0].ToString());
                Console.WriteLine("sdfsdf");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            Console.ReadKey();
        }
    }
}

app.config看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

但是,似乎不需要app.config ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档