使用 windows MAF(AddIn 管道)进行调试时出现异常
Exception while debugging using windows MAF (AddIn pipeline)
我一直在尝试构建一个 AddIn 架构,并且一直在使用 MAF。我遵循的基础知识已给出 here on Microsoft docs
申请背景简介:
- 我有一个 wpf 宿主应用程序,它将在 运行 时加载 addIn 程序集。 addIns 实现了一个契约(接口),并装饰有一个有助于宿主发现它的属性。这些是 MAF 下的标准内容,所以不想在这里放更多,但如果它有助于清晰,那么很乐意放更多。应用程序 Host/AddIns 都在我的笔记本电脑上,我正在 运行ning在管理员配置文件下。
加载插件时,主机中的主要代码是:
string appPath = Environment.CurrentDirectory + "\Pipeline";
string[] warnings = AddInStore.Rebuild(appPath);
if (warnings.Length > 0)
{
string msg = "Could not rebuild pipeline:";
foreach (string warning in warnings) msg += "\n" + warning;
MessageBox.Show(msg);
return;
}
Collection<AddInToken> addInTokens = AddInStore.FindAddIns(typeof(IWPFAddInHostView), appPath);
AddInToken wpfAddInToken = addInTokens[0];
// the only line I can see that has something to do with
// security permissions
this._wpfAddInHostView = wpfAddInToken.Activate<IWPFAddInHostView>(AddInSecurityLevel.Internet);
FrameworkElement addInUI = this._wpfAddInHostView.GetAddInUI();
this.addInUIHostGrid.Children.Add(addInUI);
当我 运行 此代码工作正常(加载 addIn 并单击 addIn UI 中的按钮弹出预期的消息框),但在调试模式下它给出以下异常并崩溃(它正确加载了加载项,但在单击按钮时发生了异常),我标记了唯一与上面的安全权限有关的行,不确定为什么这只应该在调试模式下发生,甚至不知道为什么会发生。
另外,我不知道一个问题有2个问题,但是我没有看到很多人使用MAF并且产品页面说没有积极支持,不知道我是否做出了错误的选择。
System.Security.SecurityException HResult=0x8013150A
Message=Request for the permission of type
'System.Security.Permissions.UIPermission, mscorlib, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
Source= StackTrace:
更改安全权限
this._wpfAddInHostView = wpfAddInToken.Activate<IWPFAddInHostView>(AddInSecurityLevel.Internet);
完全信任作品。
this._wpfAddInHostView = wpfAddInToken.Activate<IWPFAddInHostView>(AddInSecurityLevel.FullTrust);
因此,显然这与互联网安全级别有关,即部分信任。但是我还是很好奇为什么这个异常只有在我运行系统处于调试模式时才会出现?
我一直在尝试构建一个 AddIn 架构,并且一直在使用 MAF。我遵循的基础知识已给出 here on Microsoft docs
申请背景简介:
- 我有一个 wpf 宿主应用程序,它将在 运行 时加载 addIn 程序集。 addIns 实现了一个契约(接口),并装饰有一个有助于宿主发现它的属性。这些是 MAF 下的标准内容,所以不想在这里放更多,但如果它有助于清晰,那么很乐意放更多。应用程序 Host/AddIns 都在我的笔记本电脑上,我正在 运行ning在管理员配置文件下。
加载插件时,主机中的主要代码是:
string appPath = Environment.CurrentDirectory + "\Pipeline";
string[] warnings = AddInStore.Rebuild(appPath);
if (warnings.Length > 0)
{
string msg = "Could not rebuild pipeline:";
foreach (string warning in warnings) msg += "\n" + warning;
MessageBox.Show(msg);
return;
}
Collection<AddInToken> addInTokens = AddInStore.FindAddIns(typeof(IWPFAddInHostView), appPath);
AddInToken wpfAddInToken = addInTokens[0];
// the only line I can see that has something to do with
// security permissions
this._wpfAddInHostView = wpfAddInToken.Activate<IWPFAddInHostView>(AddInSecurityLevel.Internet);
FrameworkElement addInUI = this._wpfAddInHostView.GetAddInUI();
this.addInUIHostGrid.Children.Add(addInUI);
当我 运行 此代码工作正常(加载 addIn 并单击 addIn UI 中的按钮弹出预期的消息框),但在调试模式下它给出以下异常并崩溃(它正确加载了加载项,但在单击按钮时发生了异常),我标记了唯一与上面的安全权限有关的行,不确定为什么这只应该在调试模式下发生,甚至不知道为什么会发生。
另外,我不知道一个问题有2个问题,但是我没有看到很多人使用MAF并且产品页面说没有积极支持,不知道我是否做出了错误的选择。
System.Security.SecurityException HResult=0x8013150A
Message=Request for the permission of type 'System.Security.Permissions.UIPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
Source= StackTrace:
更改安全权限
this._wpfAddInHostView = wpfAddInToken.Activate<IWPFAddInHostView>(AddInSecurityLevel.Internet);
完全信任作品。
this._wpfAddInHostView = wpfAddInToken.Activate<IWPFAddInHostView>(AddInSecurityLevel.FullTrust);
因此,显然这与互联网安全级别有关,即部分信任。但是我还是很好奇为什么这个异常只有在我运行系统处于调试模式时才会出现?