6

次のような LoadFrom ローディング コンテキストを使用して、ネイティブ コードから相互運用シナリオで使用する WPF アセンブリがあります。

AppDomain.CreateInstanceFrom("c:\mydlls\mywpfstuff.dll", "myclass")

mydlls は、実行可能ファイルが置かれているフォルダーとは異なることに注意してください。これは、私もロードする通常の非 ui .NET dll に対しては正常に機能しますが、これを実行しようとするとエラーが発生します。AppDomain.CurrentDomain.AssemblyResolve イベント ハンドラーをアタッチし、読み込みに失敗したイベントを取得しました。ResolveEventArgs の名前は「mywpfstuff.resources」で、RequestingAssembly は空です。「mywpfstuff.resources」という名前のファイルがなく、このアセンブリを自分で解決する方法がわかりませんでした。

エラーを引き起こすコード行は InitializeComponent(); です。メインのユーザー コントロール コンストラクターを呼び出します。

内部 XAML (BAML?) メカニズムがいくつかのリソースを読み込もうとしているように思えますが、LoadFrom コンテキストの代わりにその標準の Load コンテキストを使用します。

この問題を回避する方法はありますか、できれば WPF に LoadFrom コンテキストを使用させるか、それが不可能な場合は手動でアセンブリを解決する方法はありますか?

4

2 に答える 2

0

このUnused References – VS2010 Add-in – top to bottomを作成したときも、同様のシナリオがありました。

問題は、リソースがすでにロードされており、別のリソースを再ロードできないことです。

お役に立てれば...

アクセスする Start メソッドを作成しました。

public static void Start()
{
    if (Application.Current == null)
    {
        // create the Application object
        App a = new App();
        var l = a.Resources["Locator"] as Locator;
        // do something with l
        a.Run();
    }
    else
    {
        var locator = new Locator();
        // do something with l
        Application.Current.Resources.Remove("Locator");
        Application.Current.Resources.Add("Locator", locator);
        MainWindow main = new MainWindow();
        main.Show();
    }
}
于 2013-04-11T09:24:01.123 に答える
0

ローカリゼーションの問題とresxの欠落が原因で、過去に同様の問題がありました。

XAML がそのアセンブリのリソースを使用する場合は、UI のカルチャのリソースがc:\mydllsの適切なサブフォルダーで実際に利用可能であることを再確認してください。

于 2013-04-09T18:12:53.763 に答える