MEF从网络共享文件夹加载插件

use*_*195 9 c# mef

撕裂我的头发试图弄清楚为什么我有这个问题,所以希望有人可以提供帮助.

我有一个使用MEF加载插件的程序.我希望系统的客户端和服务器部分能够使用将位于服务器上的相同插件存储.

我的问题是,当我将插件位置设置为" C:\Users\Administrator\Desktop\ClientPlugins"时插件加载正常.如果我将位置更改为" \\XRP-SERVER\Users\Administrator\Desktop\ClientPlugins",则不会加载插件.

当我\\XRP-SERVER\Users\Administrator\Desktop\ClientPlugins在Windows资源管理器中输入" "时,找到位置并且插件dll就在那里.

请有人帮忙.

如果您需要更多信息,请与我们联系.

根据一个建议我已经尝试编辑配置包括以下但这没有解决问题....

  <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <runtime>
        <loadFromRemoteSources enabled="true"/>
      </runtime>
Run Code Online (Sandbox Code Playgroud)

亲切的问候

Mat*_*ott 8

安全策略通常会禁用加载远程代码(即外部位置的程序集).

您可以尝试以下配置更改:

<runtime>
    <loadFromRemoteSources enabled="true"/>
</runtime>
Run Code Online (Sandbox Code Playgroud)

另一件需要注意的事情是,当您从网络位置复制文件时,它们通常会在其备用数据流中指定区域.在资源管理器中,可以在查看文件属性时使用"取消阻止"命令将其删除.

或者,您可以以编程方式从备用数据流中删除区域,如Mike Hadlow的博客中所示.


seb*_*ebd 4

我昨天遇到了这个问题,并将问题范围缩小到 MEF 如何加载程序集。当您创建 DirectoryCatalog 时,它会依次创建 AssemblyCatalog 的集合。每个 AssemblyCatalog 都会执行以下操作:

    AssemblyName assemblyName = AssemblyName.GetAssembly();
    Assembly.Load(assemblyName);
Run Code Online (Sandbox Code Playgroud)

对 的调用Assembly.Load引发了沙箱异常(由于我还无法解释的原因),因此没有找到任何部分,因为它默默地捕获了错误。

有趣的是,调用Assembly.LoadFrom(<pathToYourDll>)返回Assembly工作正常(没有抛出异常)。AssemblyCatalog将其与以 an作为输入的重载构造函数相结合Assembly,您就得到了一个解决方法!

因此,我没有使用 a DirectoryCatalog,而是列出了路径中的所有 DLL,并迭代创建了 aAssemblyCatalog并将其添加到我的CompositionContainer.

注意:我在 App.Config 中使用 loadFromRemoteSources="true" 标志,这是必需的,否则它总是会崩溃。

希望这可以帮助