我们在Azure DevOps上构建的持续集成在运行MSTest单元测试时刚开始出现此问题。未更新任何此代码。Unity.Container.dll版本5.11.11.0以及5.11.8.0较旧项目上的www.example.com都出现此问题。无法在Visual Studio中本地重现。有什么想法吗?使用.net Framework 4.8测试c#类库。以下是TestInitialize中的代码:
var container = new UnityContainer();
初始化方法MyTestClass.ATestInitialize抛出异常。系统类型初始化异常:“Unity.Lifetime.TransientLifetimeManager”的类型初始值设定项引发了异常。---〉系统.安全.验证异常:操作可能会使运行库不稳定。
C:\projects\abstractions\src\Lifetime\Managers\TransientLifetime Manager.cs中Unity. Lifetime. transient 寿命管理器.. cctor()处的堆栈跟踪:第26行
这是使用运行Windows 2019的Azure管道代理池。
2条答案
按热度按时间2ledvvac1#
当应用程序代码尝试执行isn't allowed under the current security context的操作时,可能会引用
System.Security.VerificationException: Operation could destabilize the runtime
。尽管您没有更改代码,这很可能是环境因素造成的,很有可能您的应用程序代码中有某种安全需求,并且测试对象正在执行的某些操作需要在其他计算机上不可用的某些功能。这发生在生成代理上的事实在某种程度上是不相关的,因为这个问题很可能发生在没有相同需求的计算机上的其他人身上。例如,计算机上禁用了CAS策略,或者应用程序需要的证书或签名密钥未安装在遥控器上。可能是应用程序代码正在动态发出IL指令,而应用程序要求对代码进行签名,但不再要求对代码进行签名。
如果您使用的是Microsoft提供的云托管构建代理,他们运行的是更新的安全补丁版本的运行时,而您的计算机没有遇到同样的问题,这也是可能的。
VerificationException的描述如下:
当安全策略要求代码是类型安全的,而验证进程无法验证代码是否是类型安全的时引发的异常
存在similar question posted here。一些证据表明:
2ic8powd2#
问题:很久以前,至少6个月前,我修复了一个错误,并从Visual studio的IDE文件夹中删除了其中一个程序集
发现Unity的问题:突然间,我的单元测试开始失败,我正在四处寻找解决方案。(这个问题正是这里提到的,但不是在Azure上,它只在我的本地机器上)
溶液:尽管我们更新了我们的VS IDE并没有解决这个问题,但我所要做的就是从我的Visual Studio IDE位置Common 7/IDE中删除公共和引用程序集文件夹,并删除这些文件夹(进行备份),然后打开VS安装程序并修复Visual Studio。
这修复了我的问题与这个例外。