我可以使用此表单加载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的示例代码吗?
我想在代码本身中执行此操作,而不更改任何配置文件。
答案 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
这在所有目的上都适合我。