gpt4 book ai didi

c# - 在远程机器上使用 Assembly.LoadFrom() 加载的程序集导致 SecurityException

转载 作者:太空宇宙 更新时间:2023-11-03 19:26:21 24 4
gpt4 key购买 nike

我正在使用 Assembly.LoadFrom(fileName) 加载程序集。当 fileName 在本地机器上时,一切正常。但是,当相同的文件(和依赖项)位于远程网络共享上时,当我尝试从创建新的 SqlConnection远程程序集:

System.Security.SecurityException: Request for the permission of type 'System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

有什么治疗方法?

最佳答案

您可以将程序集作为字节加载并使用 Assembly.Load(bytes) 加载它,也许这可行。

或者您向应用程序授予所请求的权限。

编辑:

我做了一个小测试,它对我有用。这是一些代码:

static Dictionary<Assembly, String> _Paths = new Dictionary<Assembly, String>();

static void Main(string[] args)
{
AppDomain current = AppDomain.CurrentDomain;
current.AssemblyResolve += new ResolveEventHandler(HandleAssemblyResolve);

// This line loads a assembly and retrieves all types of it. Only when
// calling "GetTypes" the 'AssemblyResolve'-event occurs and loads the dependency
Type[] types = LoadAssembly("Assemblies\\MyDLL.dll").GetTypes();
// The next line is used to test permissions, i tested the IO-Permissions
// and the Reflection permissions ( which should be denied when using remote assemblies )
// Also this test includes the creation of a Form
Object instance = Activator.CreateInstance(types[0]);
}

private static Assembly LoadAssembly(string file)
{
// Load the assembly
Assembly result = Assembly.Load(File.ReadAllBytes(file));
// Add the path of the assembly to the dictionary
_Paths.Add(result, Path.GetDirectoryName(file));
return result;
}

static Assembly HandleAssemblyResolve(object sender, ResolveEventArgs args)
{
// Extract file name from the full-quallified name
String name = args.Name;
name = name.Substring(0, name.IndexOf(','));
// Load the assembly
return LoadAssembly(Path.Combine(_Paths[args.RequestingAssembly], name + ".dll"));
}

重要的事情:

可能有些文件没有匹配的名称和文件名,但您可以通过使用 AssemblyName.GetAssemblyName(file) 检查文件夹中的所有文件来解决此问题。

关于c# - 在远程机器上使用 Assembly.LoadFrom() 加载的程序集导致 SecurityException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8308312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com