【问题标题】:Unity Container VerificationException in TransientLifetimeManager on Azure DevOpsAzure DevOps 上 TransientLifetimeManager 中的 Unity Container VerificationException
【发布时间】:2022-01-08 13:13:42
【问题描述】:

我们在 Azure DevOps 上构建的持续集成刚刚开始在运行 MSTest 单元测试时遇到此问题。没有更新任何此代码。 Unity.Container.dll 版本 5.11.11.0 和旧项目中的 5.11.8.0 会发生这种情况。无法在视觉工作室本地重现。有任何想法吗??使用 .net Framework 4.8 测试 c# 类库。这是TestInitialize中的代码:

var container = new UnityContainer();

初始化方法 MyTestClass.ATestInitialize 抛出异常。 System.TypeInitializationException:类型初始化程序 'Unity.Lifetime.TransientLifetimeManager' 抛出异常。 ---> System.Security.VerificationException:操作可能会破坏 运行时..

Unity.Lifetime.TransientLifetimeManager..cctor() 中的堆栈跟踪 C:\projects\abstractions\src\Lifetime\Managers\TransientLifetimeManager.cs:line 26

这是使用运行 Windows 2019 的 Azure Pipelines 代理池。

【问题讨论】:

  • 您能否提供更多有关MyTestClass.ATestInitialize() 方法中发生的情况的详细信息?这也是 xUnit、MSTest、NUnit 吗?它正在测试什么类型的项目(asp.net、wpf、类库等)?
  • 另外,因为这发生在您的构建服务器上而不是您的本地计算机上,您能否提供有关构建代理的更多详细信息?您是使用微软提供的云托管构建代理还是运行自托管构建代理。在两者中,请指定您使用的操作系统。
  • @byranbcook 感谢您的回复。我更新了 desc 以包含 MSTest 和 Azure Pipelines Windows 2019 服务器。它已经提到了它只是创建新 UnityContainer 对象的代码。这有帮助吗?我怎样才能找到这个?谢谢
  • 正在测试什么类型的应用程序? Web 应用、类库等?
  • 类库。 .Net Framework 4.8,c#,对不起,我忘了回答那部分谢谢

标签: .net azure-devops azure-pipelines unity-container


【解决方案1】:

当应用程序代码尝试执行isn't allowed under the current security context 的操作时,可能会出现对System.Security.VerificationException: Operation could destabilize the runtime 的引用。尽管您没有更改代码,但它可能是环境性质的。很有可能您的应用程序代码中有某种安全需求,而被测对象正在做一些需要在其他机器上不可用的东西。这发生在构建代理上的事实有点无关紧要,因为在没有相同要求的机器上的其他人可能会出现此问题。

例如,您的计算机上禁用了 CAS 策略,或者应用程序需要远程未安装的证书或签名密钥。可能是应用程序代码动态发出 IL 指令,而您的应用程序要求对代码进行签名,但不再需要。

如果您使用的是 Microsoft 提供的云托管构建代理,它们也可能运行更新的安全补丁版本的运行时,而您的计算机不会遇到同样的问题。

VerificationException 的描述说明:

安全策略要求代码类型安全且验证过程无法验证代码类型安全时抛出的异常

有一个similar question posted here。一些证据表明:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多