Testing 由于AppDomain.CurrentDomain,TFS生成计算机中的单元测试失败
我面临着一个问题,我的单元测试没有在我的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
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上使用程序集了…很遗憾,你的建议对我不起作用。还有其他你熟悉的解决方法吗?