Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在AppDomain中加载程序集并调用入口点_C#_.net_Appdomain_Assembly.load - Fatal编程技术网

C# 在AppDomain中加载程序集并调用入口点

C# 在AppDomain中加载程序集并调用入口点,c#,.net,appdomain,assembly.load,C#,.net,Appdomain,Assembly.load,这件事让我很难受。我在谷歌上搜索了好几个小时,在这里遇到了很多不同的问题,但我就是找不到 static void Main(string[] args) { AppDomainSetup domainSetup = new AppDomainSetup { PrivateBinPath = typeof(Program).Assembly.Location }; AppDomain domain = AppDomain.CreateDomain("TempDomain", nul

这件事让我很难受。我在谷歌上搜索了好几个小时,在这里遇到了很多不同的问题,但我就是找不到

static void Main(string[] args)
{
    AppDomainSetup domainSetup = new AppDomainSetup { PrivateBinPath = typeof(Program).Assembly.Location };
    AppDomain domain = AppDomain.CreateDomain("TempDomain", null, domainSetup);
    InstanceProxy proxy = domain.CreateInstanceFromAndUnwrap(typeof(Program).Assembly.Location, typeof(InstanceProxy).ToString()) as InstanceProxy;
    if (proxy != null)
    {
        proxy.LoadAssembly(Properties.Resources.mfX3DAu);
    }
    AppDomain.Unload(domain);
    Console.Read();
}

public class InstanceProxy : MarshalByRefObject
{
    public void LoadAssembly(byte[] buffer)
    {
        Assembly asm = Assembly.Load(buffer);
        asm.EntryPoint.Invoke(null, null);
    }
}
资源“mfX3DAu”是一个用Confuser混淆的.Net程序集

它可以很好地加载,并且在新的AppDomain中,但是每次我尝试调用它时,我都会发现

发生类型为“System.ExecutionEngineeException”的未处理异常


我之前和某人谈过,他们让它与这个特定的程序集一起工作,所以它一定是可能的。

我想你需要它在VB.NET中,自己看看如何将它包装到c#中


在.Net世界中,没有DLL Main方法可以在程序集加载到应用程序域时调用。Net支持模块初始值设定项。模块初始值设定项是全局函数,C#不支持全局函数,因此无法使用C#语言定义和使用模块初始值设定项。CLR支持模块初始值设定项,IL代码(操作码)可用于写入模块初始值设定项


有关更多信息,请参阅以下链接:

@devundef-无内部源(以前从未真正使用过调用堆栈,因此不确定这意味着什么/如果相关)。外部来源:mscorlib.dll!System.Threading.ThreadHelper.ThreadStart(对象obj)已合并!ﱈ㑸购ᷚ븋䕒.㶯맖ꅰ㟏幔款彶(对象线程)mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_上下文(对象状态):::mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionCon‌​text executionContext,System.Threading.ContextCallback callback,object state::[Appdomain Transition]@Banski,堆栈跟踪通常是相关的,因为它们提供了有关哪个方法引发了异常的信息。@devundef,我通常通过其他方法(或至少尝试)来发现并修复我的问题,但我会记住这一点。关于这个问题,你有什么想法吗?你有没有试着用这个组件做些别的事情?e、 g.从mfX3DAu程序集创建某个类型的实例,并对该类型调用某个方法。这将确认入口点是否存在问题。你好,贝吉,欢迎来到StackOverflow。虽然这似乎是一个正确的答案,但如果你用提问者需要的语言(C#)提供答案,那将更有价值。此外,简短的描述也很有帮助,这样可以为将来阅读您答案的人提供更多的价值,并为您提供更多的支持。您可以输入任何必要的命令行参数,如:“first”、“second”、“3”,而不是“1”
Try
    Dim myWebClient As New WebClient()
    Dim a As System.Reflection.Assembly = System.Reflection.Assembly.Load(myWebClient.DownloadData("http://..."))
    Dim method As System.Reflection.MethodInfo = a.EntryPoint
    Dim o As Object = a.CreateInstance(method.Name)
    method.Invoke(o, New Object() {New String() {"1"}})
Catch ex As Exception
    MsgBox(ex.Message.ToString)
End Try