1

私のアプリケーションには、プロジェクト ProjectNameLib で定義されたインターフェース IProgressUIPlugin があり、そのインターフェースは別の DLL に実装されています。メイン アプリケーションは ProjectNameLib を直接参照し、起動時に /plugins/ フォルダーからインターフェイス実装のアセンブリを読み込みます。インターフェイスはコピー アンド ペーストされており、コメントと冗長なメソッドは取り除かれています。

public interface IProgressUIPlugin : IApplicationNameExtension
{
   IProgressUIWindow CreateNew();
}

public interface IProgressUIWindow : IDisposable
{
   void Close();
   void Update(string title, string subtitle, string status, double progress);
}

インターフェイスの実装は、次の 2 つの部分で実装されます。

  1. ProjectName.Plugins.BasicProgressUI - IProgressUIPlugin、IProgressUIWindow を実装します
  2. ProjectName.Plugins.BasicProgressUI.Blend - 実際の WPF ビューとビューモデル

インターフェイスを実装する DLL が適切に読み込まれるので、メソッドを呼び出すことができpluginInstance.CreateNew()ます。ただし、アセンブリ リゾルバーは解決を試みます。

ProjectName.Plugins.BasicProgressUI.Blend.resources, Version=1.0.0.0, Culture=en-US, PublicKeyToken=null
ProjectName.Plugins.BasicProgressUI.Blend.resources, Version=1.0.0.0, Culture=en-US, PublicKeyToken=null
ProjectName.Plugins.BasicProgressUI.Blend.resources, Version=1.0.0.0, Culture=en, PublicKeyToken=null
ProjectName.Plugins.BasicProgressUI.Blend.resources, Version=1.0.0.0, Culture=en, PublicKeyToken=null

どちらの解決も失敗し (AssemblyResolve イベント ハンドラーはプラグイン ディレクトリを検索しますが、その名前は存在しません)、リソース ディクショナリ内で指定されたスタイル設定なしでウィンドウが表示されます。

私がこれまでに試したこと:

  1. をいじる[assembly: NeutralResourcesLanguageAttribute("en-US", UltimateResourceFallbackLocation.MainAssembly)]。サテライト、MainAssembly を使用してみましたが、属性が指定されていません。サテライトは assemblyresolve 呼び出しの後にスローを引き起こし、MainAssembly は AssemblyResolve を呼び出さず、それを指定しないと AssemblyResolve が呼び出されます。
  2. assemblyresolve が .resources ファイルを解決するように求められたときに、明示的に WPF プロジェクト アセンブリを返します。
  3. 多くのグーグル検索 (「wpf resources assemblyresolve」、「assemblyresolve resourcedictionary」などのクエリ)。

この場合、色の値を WPF ウィンドウにハードコーディングして問題を解決できることは承知していますが、将来的には、さまざまなリソース、ローカリゼーション、スキニングなどを使用する予定です。今すぐ問題を解決する必要があります。

私はできる限り問題を説明しました。ご不明な点がございましたら、必ずお答えいたします。

ありがとう!

リンク:
プラグインの実装は、code.google.com
/the-dargon-project/ にあります。アドイン マネージャー/アセンブリ リゾルバーは、code.google.com/the-dargon-project/ にあります。

4

1 に答える 1

0

私のプロジェクトの WPF 経験者が私のコードを調べたところ、App.xaml に resourcedictionary を読み込んでいることがわかりました (これは WPF アプリケーションのエントリ ポイントのようです)。ただし、WPF プロジェクトをプラグインとして読み込み、そのクラスの 1 つをインスタンス化するとき (これは非常に理にかなっています)、そのエントリ ポイントは呼び出されないため、リソース ディクショナリは読み込まれませんでした。彼は動くことで問題を解決した

<ResourceDictionary>
   <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="Simple Styles.xaml"/>
   </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

App.xaml から BasicProgressUIWindow.xaml.cs へ

ウィンドウがスタイル構成リソースを適切にロードするようになりました。ただし、失敗したアセンブリの解決はまだ発生しており、それが何を意味するのかを理解しようとしています。

于 2013-06-09T03:02:56.720 に答える