C# 沙盒AppDomain跨程序集异常处理

C# 沙盒AppDomain跨程序集异常处理,c#,exception-handling,sandbox,appdomain,code-access-security,C#,Exception Handling,Sandbox,Appdomain,Code Access Security,我在沙盒应用程序域中遇到了一些异常问题。 沙箱中运行的代码是安全透明的。 我有一个实用程序dll,它允许部分受信任的调用者,并为sanboxed代码提供功能。它的方法是安全关键的。 在我们遇到例外之前,一切都很顺利 沙箱中运行的代码受到try-catch块的保护,因此,如果ti抛出,它不会关闭应用程序 如果从security trasparent dll中的代码引发异常,则一切正常。但是,如果沙盒代码调用trusted utility dll中的方法,并且该代码抛出,则会发生以下情况: 如果我在

我在沙盒应用程序域中遇到了一些异常问题。 沙箱中运行的代码是安全透明的。 我有一个实用程序dll,它允许部分受信任的调用者,并为sanboxed代码提供功能。它的方法是安全关键的。 在我们遇到例外之前,一切都很顺利

沙箱中运行的代码受到try-catch块的保护,因此,如果ti抛出,它不会关闭应用程序

如果从security trasparent dll中的代码引发异常,则一切正常。但是,如果沙盒代码调用trusted utility dll中的方法,并且该代码抛出,则会发生以下情况:

如果我在调试器中,调试器将中断:

An exception of type 'Blah' occurred in Trusted.dll but was not handled in user code
这本身是正常的,但是我的try-catch块捕获的异常不是“Blah”类型,而是:

[System.Security.SecurityException] = {"Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed."}
我的猜测是,从受信任程序集到部分信任代码的异常“泄漏”是一个安全问题。我的第二个猜测是,这被认为是一个问题,因为中间的部分受信任代码可能捕获异常,这可能导致安全问题,因此传播被阻止。 我不清楚的是,框架何时实际尝试断言导致引发上述异常的“SecurityPermission”

我的问题是:我应该如何处理这个案件?有没有一种方法可以让它以一种“干净”的方式工作(异常从受信任-部分-受信任的代码一路传播),如果有,如何以一种安全的方式工作?(显然,我不想盲目地断言权限,而不恢复它们!)

我有一个回退解决方案(我在我的可信助手中记录异常,抛出异常,捕获安全异常,重新抛出原始异常),但我想知道是否有一个更干净的解决方案“符合规则”,而不是扭曲规则


而且如果我对跨程序集异常处理的猜测是正确的

所以,结果证明它是一个,或者可能是它的反面

只有在调试器中运行代码时,才会出现此问题。沙箱似乎不喜欢在异常上中断然后在调试器中恢复异常的行为。在调试器之外,只要您完成了家庭作业(程序集受信任并添加到域受信任的程序集列表中,它允许部分受信任的调用者,等等),它就会按预期工作

值得指出的另一个问题是:如果要保存异常并将其报告给调用appdomain,则异常必须是
[Serializable]
<但是,code>System.Exception是可序列化的,因此您需要实现序列化构造函数(
BlahException(SerializationInfo,StreamingContext context)
并将参数传递给base()