2009-03-25 11 views
0

リフレクションを使用してデータプロバイダをロードするASP .NETアプリケーションの既存のコードがあります。私はWPFアプリケーションでこのコードを再利用したいと思いますが、アプリケーションがASP .NETでない場合、BuildManager.GetTypeは最上位レベルのアセンブリだけを調べます。誰もこの制限を回避する方法を知っていますか?BuildManager.GetTypeを使用してWPFでアセンブリを参照する

次のコードは、DotNetNuke.Data.MySqlDataProviderがSystem.Webアセンブリに見つかりませんという例外をスローします。 DotNetNuke.Data.MySqlDataProviderクラスを含むアセンブリは、コンパイルされたWPFアプリケーションのbinフォルダに確実に存在します。

Dim objType Type = BuildManager.GetType("DotNetNuke.Data.MySqlDataProvider", True, True) 

答えて

0

このように、タイプを探すことのAppDomainを使用してみてください:

private Type GlobalGetType(string typeName) 
    { 
     Type t = null; 

     foreach (Assembly ass in AppDomain.CurrentDomain.GetAssemblies()) 
     { 
      Type assType = ass.GetType(typeName); 

      if (t != null && assType != null) 
       throw new ArgumentException("The specified type was found on different assemblies (\"" + t.Assembly.FullName + "\" and \"" + ass.FullName + "\")"); 

      if (assType != null) 
       t = assType; 
     } 

     return t; 
    } 

それは(フレームワークアセンブリを含む)アプリケーションのすべてのアセンブリになります。アセンブリがトップレベルのアセンブリであるかどうかを知る方法があるかどうかはわかりませんが、魔法使いは検索を最適化しますが、まだかなり速いです。

+0

それは私がその時に探していたものです:)私は別のやり方でやりましたが、私はまだあなたに答えを与えます – Alex

関連する問題