![](/img/trans.png)
[英]Microsoft.Web.Administration (for IIS7 automation) doesn't work in VS 2010
[英]ReflectionTypeLoadException for Microsoft.Web.Administration running Test Project in VS2010
我們最近已將所有VS2008項目升級到VS2010。 我們的代碼庫仍然針對框架版本3.5,但是我敢肯定你們大多數人都知道測試項目必須升級到框架版本4.0。
由於測試項目針對框架4.0,因此我們有一組無法使用的特定測試。 這些測試將測試正在執行某種反射任務的所有代碼。 通過一些調試,我設法縮小了范圍。
由於某種原因,在升級的測試項目中,以下代碼:
AppDomain.CurrentDomain.GetAssemblies();
將返回對“ Microsoft.VisualStudio.Enterprise.AspNetHelper”的引用。 如果我再打電話
GetTypes()
在此程序集上,我收到了ReflectionTypeLoadException,說它無法加載程序集“ Microsoft.Web.Administration”。
因此在我看來,“ Microsoft.VisualStudio.Enterprise.AspNetHelper”中存在某種類型,該類型繼承或引用了Microsoft.Web.Administration中的另一種類型。 我已經閱讀了一些書,並意識到Administration dll是IIS7的一部分。 我在XP上進行開發,沒有安裝IIS7。
我的真正問題是-為什么在我的應用程序域中的Microsoft.VisualStudio.Enterprise.AspNetHelper在VS2010測試中而不在VS2008測試中? 創建一個簡單的控制台應用程序執行相同的操作似乎沒有問題-僅對於測試項目。 我該如何解決?
這有點hacky,但是可以解決這個問題:
AppDomain.CurrentDomain.GetAssemblies().Where(a => !IsIgnoredAssembly(a))
哪里
private bool IsIgnoredAssembly(Assembly assembly)
{
// TODO - find a better way to remove "system" assemblies from the auto registration
var ignoreChecks = new List<Func<Assembly, bool>>()
{
asm => asm.FullName.StartsWith("Microsoft.", StringComparison.InvariantCulture),
asm => asm.FullName.StartsWith("System.", StringComparison.InvariantCulture),
asm => asm.FullName.StartsWith("System,", StringComparison.InvariantCulture),
asm => asm.FullName.StartsWith("CR_ExtUnitTest", StringComparison.InvariantCulture),
asm => asm.FullName.StartsWith("mscorlib,", StringComparison.InvariantCulture),
asm => asm.FullName.StartsWith("CR_VSTest", StringComparison.InvariantCulture),
asm => asm.FullName.StartsWith("DevExpress.CodeRush", StringComparison.InvariantCulture),
asm => asm.FullName.StartsWith("IronPython", StringComparison.InvariantCulture),
asm => asm.FullName.StartsWith("IronRuby", StringComparison.InvariantCulture),
};
foreach (var check in ignoreChecks)
{
if (check(assembly))
return true;
}
return false;
}
我認為TODO已經說明了一切...但是我還沒有找到更好的方法:-)
我在Win7測試實驗室計算機上運行某些測試時遇到相同的問題,但是我無法在Server 2008 R2工作站上進行復制。 我沒有啟用IIS服務器角色,但是Microsoft.Web.Administration在我的GAC中-我認為這就是為什么測試在我本地通過的原因。
如果我用GetExportedTypes()代替GetTypes(),則可以解決此問題。 如果不需要內部類型,這是一個簡單的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.