旧版程序集抛出“请求主体权限失败”

时间:2015-11-13 14:41:57

标签: c# .net legacy com+ code-access-security

我正在开发一些使用System.EnterpriseServices并在.NET Framework 2.0中编译的旧.NET程序集。我在某些情况下收到 “主要权限请求失败” 例外,但在其他情况下却没有。例如,

时代码可以正常工作
  • 我是从xunit runner test in.net 4.5.1
  • 运行的
  • 我把它作为IIS内部的web服务进行了.net 4.5.1
  • 我从.net 2.0
  • 的Windows窗体应用程序构建中运行它

但是当我从Windows窗体应用程序.net 4.5.1运行它时会引发异常。在这种情况下,我得到提到的异常和FirstPermissionThatFailed     <IPermission class="System.Security.Permissions.PrincipalPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1"><Identity Authenticated="true" Role="1,50000,50750,50751:Execute"/> </IPermission>

我对旧版API进行了逆向工程,发现这些函数具有以下属性 [PrincipalPermission(SecurityAction.Demand,Role="1,50000,50750,50751:Execute")] 我知道问题可能是由Code Access Security的重大变化引起的,但我不知道到底是什么,所以我有两个问题:

  1. 此角色的实际角色将ID映射到1,50000,50750,50751
  2. 为什么代码在从resharper xunit测试运行器调用时不会触发异常?就像它在不同的安全上下文中运行?
  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

将此添加到App.config解决了问题:

<configuration> <startup useLegacyV2RuntimeActivationPolicy="true" /> </configuration>

我猜Resharper Xunit跑步者在加载并执行程序集时正在使用它,这就是它在测试中起作用的原因。