我正在度过最艰难的时光。我用谷歌搜索了几个小时,在这里遇到了许多不同的问题,但我无法得到它。
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.ExecutionEngineException'类型的未处理异常
我之前与之交谈的人说他们使用这个特定的程序集,所以它必须是可能的。
答案 0 :(得分:2)
我认为你需要这个在VB.NET中找自己如何将它包装成c#
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
答案 1 :(得分:0)
在.Net世界中,没有DLL Main方法,只要将程序集加载到应用程序域中就会调用它。然而.Net支持模块初始化器。模块初始化器是全局函数,C#不支持全局函数,因此无法使用C#语言定义和使用模块初始化器。 CLR支持模块初始化器,IL代码(OpCodes)可用于编写模块初始化器。
有关详细信息,请参阅以下链接:Module Initializers