我的项目是一个用Native C ++构建的平台的插件。该插件将重用现有C#项目的当前功能,该项目基于.NET framework 4.0构建。我们使用C ++ / CLR作为调用C#代码的桥梁。也就是说,内置在非托管c ++中的宿主应用程序调用托管C ++ dll,它调用C#dll。
平台将在一个进程中运行,插件将在另一个进程中运行。 并且平台找到插件dll的方式是用户将在平台的用户界面中输入目录,因此平台将该目录中的所有插件dll加载到插件进程中。
当我的插件文件夹是本地文件夹时,这很有效。但是,当我将plugin文件夹设置为远程文件夹时,当我尝试从C ++ / CLR类实例化C#类时,我得到了一个FileNotFoundException,详细信息是“Unknown URL protocol”。
我们的插件项目包含C ++ / CLR和C#代码,内置于不同的dll文件中。在调试模式下,在Visual Studio模块视图中,结果是C + dll未加载时加载了C ++ / CLR dll(两者都在app目录中)。当我尝试在C ++ / CLR代码中实例化托管类时会发生异常,但不幸的是,当我得到异常时没有堆栈调用。
那么如何让主机插件进程正确加载远程C#dll?
答案 0 :(得分:0)
经过进一步调查,我们发现根本原因是插件的ApplicationBase设置不正确。出于某种原因,如果文件夹设置为远程文件夹,则平台以Linux格式而不是Windows格式传递文件夹,并且我们的软件仅在Windows上运行。这就是为什么抛出“FileNotFoundException”并且当我的插件文件夹是本地文件夹时它运行良好的原因。我们需要以Windows路径格式更正ApplicationBase。