4

我可以使用这种形式加载 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 的示例代码吗?

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

4

3 回答 3

5

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

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

于 2012-11-27T14:32:28.017 回答
4

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

这对我来说在所有方面都很好。

于 2014-10-10T08:18:28.297 回答
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 中经常使用的过程类似。

于 2013-09-21T04:26:23.090 回答