【问题标题】:Test DLL already loaded when building multiple solutions in TFS在 TFS 中构建多个解决方案时已加载测试 DLL
【发布时间】:2012-11-23 21:00:50
【问题描述】:

我在 TFS 的循环中构建了 2 个解决方案,并且在这两个解决方案中我都有相同的测试 DLL(针对第一个解决方案中的 2.0 和第二个解决方案中的 3.5)。第一遍一切都很好,但在第二遍,我明白了:

API 限制:程序集 'file:///D:\Builds\1\Project\Main\Binaries\FF3.5\Potato.dll' 已从其他位置加载。无法从同一 appdomain 中的新位置加载。

我该如何解决这个问题,我可以强制卸载 DLL 吗?我可以对 appdomain 做点什么吗?

谢谢,

【问题讨论】:

    标签: .net tfs appdomain


    【解决方案1】:

    您可以尝试这个解决方案,它只涉及更改查找所有测试 dll 的表达式http://geekswithblogs.net/jakob/archive/2010/06/08/tfs-2010-build-dealing-with-the-api-restriction-error.aspx

    编辑:

    我对此进行了进一步调查,似乎测试程序集文件规范(2. 基本 -> 自动化测试 -> 测试程序集 -> 默认模板上的测试程序集文件规范)正在使用 FindMatchingFiles 活动。因此,您必须编写一个仅与您认为应该加载的文件匹配的模式。 我找不到使用该模式的指南,但这样的东西很有效:

    1. _PublishedWebsites***test*.dll(在_PublishedWebsites文件夹中查找名称中包含test的所有dll)
    2. test.dll(在基本文件夹中查找名称中包含单词 test 的所有 dll)
    3. **test.dll(在基本文件夹下的所有文件夹中查找名称中包含单词test的所有dll)

    像这样的东西没有:

    1. _PublishedWebsites**\bin*test*.dll
    2. *\bin*test.dll
    3. _PublishedWebsites*test****test*.dll

    【讨论】:

    • 感谢 Eva,但在我的情况下,它不是一个 Web 应用程序,因此该修复程序不适用。此外,TFS 2012 中似乎没有出现此问题,因此我们正在强烈考虑升级。
    • 嗯,我正在运行 TFS 2012,我遇到了这个问题。我认为您的配置在两种设置中可能不同。我建议你看看你的二进制文件夹,看看是否有两个同名的程序集。我只以_PublishedWebsites为例,它只是一种查找文件的模式,您可以使用它来包含您感兴趣的测试程序集。
    • 您提供的链接没有提到循环,我认为在该示例中 TFS 两次找到测试 DLL,因为它们实际上存在两次,因此调整通配符有效。这不是我的情况,我的第一个循环迭代通过了,第二个没有。
    • 在您的二进制文件夹中,您有两个文件夹都包含相关程序集,对吗?
    • 正确,但在二进制文件的根目录下,我有 FF2.0 和 FF3.5,它们都包含大致相同的二进制文件,但针对不同的 .net 框架。在第一遍(FF2.0)中,测试 DLL 被加载,然后在第二遍处理 FF3.5 时出现错误。
    猜你喜欢
    • 2016-02-26
    • 2018-02-10
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 2012-04-13
    • 1970-01-01
    • 2014-09-09
    相关资源
    最近更新 更多