基本的に問題は、参照されていないアセンブリでメソッドを呼び出そうとしていますが、クラスをインスタンス化するための適切な呼び出しが見つからないようです。私はnullを返す単純なType t = Type.GetType("MyApp.Helper")
とセキュリティ例外をスローするAssembly.LoadFrom("MyApp.Helper")
のようなものを試しました。Silverlight 4 - アセンブリ間でType.GetType()が動作しない
以下の例では、2つのプロジェクト/アセンブリ(Helper.dllとMenu.dll)が別々に共通の 'libs'フォルダにコンパイルされますが、相互参照はしません。 Main.dllは両方を参照し、参照はVSの 'Copy local'に設定されます。したがって、アプリケーションを実行すると、Main.xapには3つのアセンブリがすべて含まれている必要があり、同じアプリケーションドメインにロードする必要があります。それとも私の理解になります。これは不可能な探求ですか?私はプラグインに関する多くのコメントを見ていますが、これまで私はこの特定のデザインの例を見ていませんでした。たとえば、私はJeff Prosiseがhereと書いているようなことができると思いますが、私はむしろすべてを1つのパッケージに収めています。ここで
は私のコードのスケッチです:1プロジェクト/アセンブリで
、私は労働者のクラスを持っている:別のプロジェクト/アセンブリで
namespace MyApp.Helper {
public class Helper {
public void ShowHelp() {
Console.Write("Help!");
}
}
}
、私は起動しようとしたメニュークラスを持っていますヘルパー:
namespace MyApp.Menu {
public class Selector {
public void InvokeSelection(string className, string functionName) {
// fails: t will be null
Type t = Type.GetType(className);
// fails: t will be null
t = Type.GetType(string.Format("{0}.{1}, {0}, Version=1.0.0.0, Culture=\"\", PublicTokenKey=null", "MyApp.Helper", "Helper"));
// however, this works (reference to main assembly?)
t = Type.GetType(string.Format("{0}.{1}, {0}, Version=1.0.0.0, Culture=\"\", PublicTokenKey=null", "MyApp.Main", "Worker"));
// and, I'd like to do something like the following
// t.InvokeMember(functionName, ...);
}
}
}
最後に、私はメインのアプリアセンブリを持っている:
namespace MyApp.Main {
public class Main {
public static void Main() {
MyApp.Menu.Selector sel = new Menu.Selector();
sel.InvokeSelection("MyApp.Help.Helper", "ShowHelp"); // fails
sel.InvokeSelection("MyApp.Main.Main", "Worker"); // works in some cases
}
public void Worker() {
Console.Write("Work!");
}
}
}
ありがとうございました!
-Chris。
SLaks、あなたに感謝し、JeffN825:
第二に、これを試してみてください。私はAssembly.Loadを試していたが、うまくいかなかった。私の簡単な例はあまりにも単純でした。私は良いカスタムアセンブリをたくさん持っているし、私がテストしていたものを参照していないようだ。私は 'Assembly.Load' + 'GetType()'を試してみましたが、非常に多くのテクニックを試した後、すべての部品を整列させることはできませんでした。霧を切ってくれてありがとう!あなたの質問に答えるために、私はメニューlibにまっすぐ行く設定ファイルからメニューを初期化しているので、メインのアプリはそれを見ることはありません。このエラーは元々働いていたモノリシックなアプリケーションのリファクタリングによるものです。乾杯! – Chris