我正在开发一个从DLL文件汇编类的小型演示。
这是我的代码:
string path = @"\\192.168.1.3\shareFolder\testzwm.dll";
Assembly ass = Assembly.LoadFrom(path);
总是抛出FileLoadException
但是,如果我改为:
string path = @"C:\testzwm.dll";
Assembly ass = Assembly.LoadFrom(path);
有效。
这是否意味着我无法从网络路径加载DLL?我认为这没有意义。 我在\ 192.168.1.3 \ shareFolder
中有读/写权限如果我将第一个路径更改为\ 192.168.1.3 \ shareFolder \ testzwmWRONG.dll,则会抛出FileNotFoundException
,与FileLoadException不同。
所以我猜这是一些安全问题
非常感谢任何帮助。
------------------ EDIT ------------------ 我的项目是Windows Form Application。
答案 0 :(得分:4)
将以下内容添加到配置文件
<configuration>
<runtime>
<loadFromRemoteSources enabled="true" />
</runtime>
</configuration>
答案 1 :(得分:1)
虽然Mike的答案是正确的,但它可能会产生一些潜在的不良副作用。启用loadFromRemoteSources
会更改整个应用程序的安全配置,以允许加载任何远程程序集。
另一种方法是将文件内容加载到字节数组中,然后使用Assembly.Load
加载它:
public static Assembly LoadRemoteAssembly(string filename)
{
byte[] asmdata = System.IO.File.ReadAllBytes(filename);
return Assembly.Load(asmdata);
}
虽然您仍然试图通过欺骗.NET框架从网络加载程序集来绕过应用程序安全性,但您不会将应用程序打开到网络上的每个程序集。
这似乎是一个微不足道的差异,但如果您必须在安全层中挖洞,请尝试使它们小孔。