【问题标题】:Load assembly from memory从内存中加载程序集
【发布时间】:2010-07-01 13:28:31
【问题描述】:

我正在移植一个 Java 应用程序,其中类在运行时从内存(字节数组)加载和“执行”。我试图在 C# 中实现相同的目标,但是在尝试从字节数组加载程序集(使用 AppDomain.Load 方法)时遇到问题(System.IO.FileNotFoundException 异常)。

static void Main(string[] args)
{
    var domain = AppDomain.CreateDomain("foo");

    domain.AssemblyResolve += new ResolveEventHandler(domain_AssemblyResolve);

    var assembly = domain.Load("MyAssembly");
}
static Assembly  domain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    // ...
    return Assembly.ReflectionOnlyLoad(File.ReadAllBytes(@"C:\MyAssembly.exe"));
}

有没有办法加载它们而不需要将这个字节数组持久化到文件系统中?

简化这个想法,我们希望能够动态地执行和更改(更新)代码。我们使用单独的应用程序域来“加载/卸载”程序集。

【问题讨论】:

  • 字节数组必须来自某个地方。您可以打开网络连接,或使用共享内存技术来获取字节。

标签: c# .net assembly-loading


【解决方案1】:

我刚刚试过这段代码:

static void Main(string[] args)
        {

            var h = File.ReadAllBytes(@"C:\MyAssembly.exe");

            var g = Assembly.Load(h);            
        }

它运行良好 - 我没有遇到任何异常。您是否 100% 确定目标程序集存在?

【讨论】:

  • 我答错了,我使用的方法是AppDomain.Load。我会更新帖子。
【解决方案2】:

它有任何依赖关系吗?如果是这样,您应该先加载它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2012-12-06
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    相关资源
    最近更新 更多