托管可扩展性框架(MEF)和托管AddIn框架(MAF,又名System.AddIn)似乎完成了非常类似的任务.根据这个Stack Overflow问题,MEF是System.Addin的替代品吗?,你甚至可以同时使用两者.
你什么时候选择使用一个与另一个?在什么情况下你会选择同时使用它们?
可能是以下副本:我可以阻止其他AppDomain中未捕获的异常关闭应用程序吗?
一直在努力找出这个问题的答案.
只是想确保答案确实没有,在我扔掉所有代码之前,我将其驱动程序隔离在他们独立的应用程序域中并用旧式流程替换它.
所以正式的问题是这个.
我有一个默认域名"ad-default",我在其中创建了一个新的appdomain"ad-hosted",我可以避免"ad-hosted"中未处理的例外情况会删除"ad-default"吗?
我知道我可以通过连接到"广告托管"域的UnhandledException事件来观察异常,但我找不到阻止它们传播到"ad-default"域的方法.
这是真的吗?但是,如果他们不提供隔离,为什么我们甚至会想要AppDomain呢?
编辑:遗憾的是答案没有,请参阅此答案进行解释: AppDomain,处理异常
我正在学习C#。我阅读了 Andrew Troelsen 的《C# and the .NET Platform》和 Jeffrey Richter 的《CLR via C#》等书。现在,我正在尝试创建应用程序,它将从某个目录加载程序集,将它们推送到 AppDomain 并运行包含的方法(支持插件的应用程序)。这是 DLL,其中是公共接口。我将其添加到我的应用程序以及所有带插件的 DLL 中。主库.DLL
namespace MainLib
{
public interface ICommonInterface
{
void ShowDllName();
}
}
Run Code Online (Sandbox Code Playgroud)
这是插件:PluginWithOutException
namespace PluginWithOutException
{
public class WithOutException : MarshalByRefObject, ICommonInterface
{
public void ShowDllName()
{
MessageBox.Show("PluginWithOutException");
}
public WithOutException()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
另一个:PluginWithException
namespace PluginWithException
{
public class WithException : MarshalByRefObject, ICommonInterface
{
public void ShowDllName()
{
MessageBox.Show("WithException");
throw new NotImplementedException();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个应用程序,它加载 DLL 并在另一个 AppDomain 中运行它们
namespace …Run Code Online (Sandbox Code Playgroud)