Legacy assembly throws“;请求主体权限失败”;

本文关键字:权限 失败 主体 请求 throws Legacy assembly | 更新日期: 2023-09-27 18:21:45

我正在针对一些使用System.EnterpriseServices并在.NET Framework 2.0中编译的遗留.NET程序集进行开发。在某些情况下,我收到"请求主体权限失败"异常,但在其他情况下没有。例如,时代码工作正常

  • 我在.net 4.5.1中的xunit runner测试中运行了它
  • 我把它作为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")]我知道这个问题可能是由代码访问安全性的重大更改引起的,但我不知道具体是什么,所以我有两个问题:

  1. 此角色id映射到150000057050751的实际角色
  2. 为什么当代码从一个resharper xunit测试运行程序调用时,它没有触发异常??就像它在不同的安全上下文中运行一样

谢谢!

Legacy assembly throws“;请求主体权限失败”;

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

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

我猜Resharper Xuit runner在加载和执行程序集时使用了它,这就是它在测试中工作的原因。