我们目前正在开发一个具有开放 C# API 接口的程序。现在,假设您有以下 C# 脚本:
int[] Test = { 0, 3 };
private void Test()
{
Debug.Log(Test[4].ToString()); //Exception!!
}
但是,如果我们现在尝试编译,Invoke
它Test Void
会失败。它显然应该失败,但我们想捕获异常,所以我们的整个应用程序不会冻结。
Assembly assembly = Assembly.LoadFrom("C:/Our/Path/To/Dll.dll");
Type type = assembly.GetType("ClassApplication1.Test");
object instance = Activator.CreateInstance(type);
type.InvokeMember("Test",
BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreReturn,
null,
instance,
null);
如果我们正在调试,此弹出窗口将出现在 Visual Studio 2012 中,如果不调试我们的应用程序只会完全崩溃。
//编辑:
我知道这Debug.Log(Test[4].ToString()); //Exception!!
是错误的,并且会调用异常(!!!)。它被通缉了。将 try {} 块通过它会起作用,但请记住,脚本是第 3 方制作的。我没有这方面的手,但至少我不希望我们的应用程序正在吃错误(并将它们显示在 RichTextBox 中),而不是抛出它们(=应用程序崩溃)。
TLDR:我想防止我加载到我的程序集中以使我的程序崩溃的第 3 方程序集