在C#中从共享网络驱动器加载DLL

时间:2012-11-27 14:14:21

标签: c# dll

我可以使用此表单加载dll -

System.Reflection.Assembly assembly =
System.Reflection.Assembly.LoadFile(@"C:\Users\amit.pandey\Documents\Visual Studio 2010\Projects\bin\Release\EUtility.dll");

但是我需要以下列方式从共享网络驱动器加载dll -

System.Reflection.Assembly assembly =
System.Reflection.Assembly.LoadFile(@"\\falmumapp20\EUtility.dll");

我知道这是因为信任问题造成的。我尝试了各种代码,但无法使其正常工作。有人可以帮我提供从网络驱动器加载DLL的示例代码吗?

我想在代码本身中执行此操作,而不更改任何配置文件。

3 个答案:

答案 0 :(得分:5)

您需要告诉机器信任该位置。

您可以使用caspol实用程序执行此操作。

答案 1 :(得分:3)

或者,从磁盘加载文件并在字节数组上调用Assembly.Load似乎可行(框架4):

        string Share = @"R:\Test\TestAssembly.dll";
        byte[] AssmBytes = File.ReadAllBytes(Share);
        Assembly a = Assembly.Load(AssmBytes);

        //Invoking a method from the loaded assembly
        var obj = a.CreateInstance("TestAssembly.Class1");
        obj.GetType().InvokeMember("HelloWorld", BindingFlags.InvokeMethod, null, obj, null);

由于MS阻止LoadFrom()中的网络加载,这表明这样做可能不是最佳做法。但是,这类似于在EXE中将程序集作为资源嵌入时经常使用的过程。

答案 2 :(得分:2)

您可以使用Assembly.UnsafeLoadFrom而不是加载二进制内容。 见http://msdn.microsoft.com/en-us/library/system.reflection.assembly.unsafeloadfrom%28v=vs.110%29.aspx

这在所有目的上都适合我。