Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Testing 由于AppDomain.CurrentDomain,TFS生成计算机中的单元测试失败_Testing_Build_Tfs - Fatal编程技术网

Testing 由于AppDomain.CurrentDomain,TFS生成计算机中的单元测试失败

Testing 由于AppDomain.CurrentDomain,TFS生成计算机中的单元测试失败,testing,build,tfs,Testing,Build,Tfs,我面临着一个问题,我的单元测试没有在我的TFS构建机器上运行,尽管它们正在我的开发人员机器上运行 我在下一行遇到异常,试图为特定接口加载所有已加载的程序集: var classesToMap = AppDomain.CurrentDomain.GetAssemblies().ToList() .SelectMany(s => s.GetTypes()) .Where(p => typeof(IInterface).IsAssignableFro

我面临着一个问题,我的单元测试没有在我的TFS构建机器上运行,尽管它们正在我的开发人员机器上运行

我在下一行遇到异常,试图为特定接口加载所有已加载的程序集:

    var classesToMap = AppDomain.CurrentDomain.GetAssemblies().ToList()
        .SelectMany(s => s.GetTypes())
        .Where(p => typeof(IInterface).IsAssignableFrom(p) && p.IsClass).ToList();
例外情况是:

System.Reflection.TargetInvocationException:已引发异常 通过调用的目标。--> System.Reflection.ReflectionTypeLoadException:无法加载一个或多个 更多请求的类型。检索LoaderExceptions属性 有关更多信息


知道为什么吗?

通过添加一个条件来丢弃GAC中的所有DLL,解决了这个问题:

 var classesToMap = AppDomain.CurrentDomain.GetAssemblies()
        .Where(a => !a.GlobalAssemblyCache)
        .SelectMany(s => s.GetTypes())
        .Where(p => typeof(IInterface).IsAssignableFrom(p) && p.IsClass).ToList();
这是一个工作,但为我做的工作


谢谢你的提示。

我也遇到了这个问题,但是@nirpi条件对我没有帮助,我成功地使用了这个解决方案:

private static Type[] GetTypesFromAssemblySafe(Assembly assembly) {
    try {
        return assembly.GetTypes();
    } catch {
        return new Type[] {};
    }
}

var types = AppDomain.CurrentDomain.GetAssemblies()
    .ToList()
    .SelectMany(GetTypesFromAssemblySafe);

来源:

在我的例子中,唯一未能加载的程序集是
Microsoft.VisualStudio.TeamSystem.Licensing
,它是
Microsoft.VisualStudio.QualityTools.Common的依赖项

基于此,我提出了一个更安全的策略:

private static Type[] GetTypesFromAssemblySafe(Assembly assembly)
{
    var ignoredAssemblies = new List<string>()
        {
            "Microsoft.VisualStudio.QualityTools.Common" //Gives trouble in TFS automated builds
        };

    if (!ignoredAssemblies.Contains(assembly.FullName.Split(',')[0]))
        return assembly.GetTypes();
    else
        return new Type[] { };
}

var types = AppDomain.CurrentDomain.GetAssemblies()
    .ToList()
    .SelectMany(GetTypesFromAssemblySafe);
私有静态类型[]GetTypesFromAssemblySafe(程序集)
{
var ignoredAssemblies=新列表()
{
“Microsoft.VisualStudio.QualityTools.Common”//TFS自动生成中出现问题
};
如果(!ignoredAssemblies.Contains(assembly.FullName.Split(',')[0]))
返回assembly.GetTypes();
其他的
返回新类型[]{};
}
var types=AppDomain.CurrentDomain.GetAssemblys()
托利斯先生()
.SelectMany(GetTypesFromAssemblySafe);

您是否尝试捕获异常并查看LoaderExceptions属性中的内容?这是LoaderExceptions中的异常(请记住,我使用的是TFS Express Beta(2011):无法加载文件或程序集“Microsoft.VisualStudio.TeamSystem.Licensing,Version=11.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT中的异常:0x8013100)我有完全相同的问题,但我已经没有在GAC上使用程序集了…很遗憾,你的建议对我不起作用。还有其他你熟悉的解决方法吗?