【问题标题】:VSTS test deployment and invalid assembly cultureVSTS 测试部署和无效的程序集文化
【发布时间】:2010-12-28 08:45:34
【问题描述】:

我有一个我正在测试的 DLL,它链接到一个我认为对 AssemblyCulture 无效的 DLL。该值为“中性”(注意大写“N”),而我正在测试的 DLL 以及我项目中的所有其他 DLL 的值为“中性”(因为它们指定了 AssemblyCulture(""))。

当我尝试部署 链接 到问题 DLL 的 DLL 时,我在 VSTS 中收到此错误:

Failed to queue test run '...': Culture is not supported.
Parameter name: name
Neutral is an invalid culture identifier.

<Exception>System.Globalization.CultureNotFoundException: Culture is not supported. Parameter name: name
Neutral is an invalid culture identifier.
   at System.Globalization.CultureInfo..ctor(String name, Boolean useUserOverride)
   at System.Globalization.CultureInfo..ctor(String name)
   at System.Reflection.RuntimeAssembly.GetReferencedAssemblies(RuntimeAssembly assembly)
   at System.Reflection.RuntimeAssembly.GetReferencedAssemblies()
   at Microsoft.VisualStudio.TestTools.Utility.AssemblyLoadWorker.ProcessChildren(Assembly assembly)
   at Microsoft.VisualStudio.TestTools.Utility.AssemblyLoadWorker.GetDependentAssemblies(String path)
   at Microsoft.VisualStudio.TestTools.Utility.AssemblyLoadWorker.GetDependentAssemblies(String path)
   at Microsoft.VisualStudio.TestTools.Utility.AssemblyLoadStrategy.GetDependentAssemblies(String path)
   at Microsoft.VisualStudio.TestTools.Utility.AssemblyHelper.GetDependentAssemblies(String path, DependentAssemblyOptions options, String configFile)
   at Microsoft.VisualStudio.TestTools.TestManagement.DeploymentManager.GetDependencies(String master, String configFile, TestRunConfiguration runConfig, DeploymentItemOrigin dependencyOrigin, List`1 dependencyDeploymentItems, Dictionary`2 missingDependentAssemblies)
   at Microsoft.VisualStudio.TestTools.TestManagement.DeploymentManager.DoDeployment(TestRun run, FileCopyService fileCopyService)
   at Microsoft.VisualStudio.TestTools.TestManagement.ControllerProxy.SetupTestRun(TestRun run, Boolean isNewTestRun, FileCopyService fileCopyService, DeploymentManager deploymentManager)
   at Microsoft.VisualStudio.TestTools.TestManagement.ControllerProxy.SetupRunAndListener(TestRun run, FileCopyService fileCopyService, DeploymentManager deploymentManager)
   at Microsoft.VisualStudio.TestTools.TestManagement.ControllerProxy.QueueTestRunWorker(Object state)</Exception>

即使我没有链接到 DLL(在我的 VSTS 包装测试或 NUnit 测试中),只要我将它添加到我的 GenericTest 文件中(我正在包装 NUnit 测试),我就会得到那个异常.

我们没有问题DLL的源代码,而且它也是代码签名的,所以我无法通过重新编译来解决这个问题。

有没有办法跳过部署 DLL DeploymentItem 的依赖项,修复或禁用文化检查,或者通过复杂的方式解决这个问题(可能以某种方式嵌入程序集)?有没有办法覆盖文化的价值,而不是破解 DLL(并删除代码签名以便破解工作)?也许有一个外部清单?

任何正确的解决方案都必须在不对生产代码进行奇怪更改的情况下运行。例如,我们不能部署被黑的 DLL。它还必须允许对 DLL 进行代码覆盖检测。

附加说明:在编译链接到问题 DLL 的测试 DLL 时,我确实收到了链接器警告,但这并没有破坏除 VSTS 之外的任何东西,并且已经发布了多个版本。

【问题讨论】:

    标签: visual-studio-2010 tfsbuild mstest cultureinfo


    【解决方案1】:

    我希望有一个替代方案,但我找到了一个适合我的解决方案。

    • 将被测项目的代码编译到单元测试DLL中,而不是引用构建的DLL
    • 破解问题 DLL 以删除代码签名,并将“中性”更改为“中性”(手动修改二进制文件)
    • 将问题 DLL 检入到单元测试项目目录中。不要覆盖生产版本
    • 将单元测试项目链接到这个 DLL 而不是原来的问题 DLL

    这不涉及对生产代码的更改,但会重复工作。要从被测项目中添加/删除源文件,您还必须修改单元测试项目,并添加/删除指向这些文件的链接。不过,它不会复制代码,因为我们使用链接而不是复制源文件。

    编辑:这其中的一些变体曾经对我有用,但现在我完全不知道它是如何工作的。这个解决方案的问题是我有一个混合模式程序集,所以我无法进行适当的破解来完成删除文化设置。明确设置的“中性”值仅在某些地方有效。

    有关我的最终解决方法,请参阅我的其他答案。它们应该适用于所有情况,尽管它们也很复杂。

    【讨论】:

      【解决方案2】:

      我发现,如果我进行检测(这是我什至为 NUnit VS 集成而烦恼的一点),那么我设法避免了这些问题。不确定哪个确切的设置组合可以解决问题,但这些是我正在使用的设置:

      • 就地仪器
      • MSTest 测试项目只依赖于 NUnit 测试项目
      • 通用测试部署 NUnit 测试(来自 MSTest bin 输出文件夹)、NUnit 测试 app.config(来自 NUnit 测试 bin 输出文件夹)和问题 DLL。其余依赖项(包括被测 DLL)由代码覆盖率部署。

      如果您不需要仪器,我找到了这个解决方法:

      • 不要链接到导致问题的顶级 DLL(在本例中为被测 DLL)
      • 修改解决方案构建设置以使您的项目依赖于该项目
      • 将所有导致问题的依赖链中的 DLL 作为嵌入式资源嵌入
      • 在运行时,获取每个 DLL 的资源流,创建一个文件,然后复制该流。基本上,提取资源并再次将它们作为文件输出

      Write file from assembly resource stream to disk

      那么,没有链接时依赖,所以 MSTest 不会看到那些 DLL。这不适用于检测,因为 DLL 仅在运行时出现,而 MSTest 希望在部署期间检测。如果您实际上必须链接到那些 DLL,它也不会很好地工作 :) 在我的情况下,它们派生自一个抽象接口,这没有问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-07
        • 2011-06-11
        • 1970-01-01
        相关资源
        最近更新 更多