2011-02-03 16 views
4

アプリケーションのプラグインを作成しています(必要な場合はAutodesk Revit Architecture 2011)。プラグインプロジェクトでWPF/XAMLタイプのキャッシュをクリアするには

デバッグ中に、プラグインを再コンパイルして、ホストに再ロードしたいとします。私の特定のホストは、Assembly.Loadを使用して、このプロセスを簡素化するアドインマネージャーを提供します。 Windows.Formsプラグインの場合、これは魅力的です。

私はWPFを使用すると、これは分解されます。最初は、私はこれらの線に沿ってエラーを得ていた(私はそれが簡単にあなたが読んでできるようにすること、いくつかの書式設定を追加しました:

System.Windows.Markup.XamlParseException: 
[A]MyApp.Controls.MyControl cannot be cast to [B]MyApp.Controls.MyControl. 
Type A originates from 'MyApp, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'LoadNeither' at location '%PATHA%'. 
Type B originates from 'MyApp, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'LoadNeither' at location '%PATHB'. 
Error at object 'MyApp.Controls.MyControl' in markup file 'MyApp;component/controls/mydialog.xaml'. 

私も無実を保護するために名前を変更コントロール、名前空間とパスの自由を取っているし、私、犯人。

私はXAMLパーサーは、それがすでにロードされているタイプのキャッシュを保持しているため、これがあると仮定します。

私の最初のステップは、AssemblyInfo.cs/[assembly: AssemblyVersion("2.0.*")を設定することにより、アセンブリのバージョンを変更することでした。これは単にエラーを動かしますさらにステップ:

System.Windows.Markup.XamlParseException: 
Unable to cast object of type 'MyApp.Controls.MyControl' to type 'MyApp.Controls.MyControl'. 
Error at object 'MyApp.Controls.MyControl' in markup file 'MyApp;component/controls/mydialog.xaml'. 
---> System.InvalidCastException: Unable to cast object of type 'MyApp.Controls.MyControl' to type 'MyApp.Controls.MyControl'. 
+0

パスは 'C:¥Documents and Settings¥Kilroy¥Local Settings¥Application Data¥Microsoft¥VisualStudio¥9.0¥ProjectAssemblies¥yzwin42a31¥MyDll.dll'のようになっていますか? –

+0

@シモン:いいえ、彼らは... –

+0

どのように見えるのですか?多分それが助けることができますか? –

答えて

2

キャッシュのクリーニング方法はわかりませんが、回避策として、Xamlを直接XamlReader.Loadで読み込み、動作するかどうかを確認します。 チェックhttp://msdn.microsoft.com/en-us/library/ms590388.aspx#Y309

+0

私はそれを試してみましょう。私は愚かな賞金を始め、その後休暇に行った。私は私の上にスマートフォンしか持っていないので、確認できません。 +1を試してみるとよいでしょう:) –

3

別のAppDomainでコンパイルを実行することをお勧めします。コンパイルが完了したら、AppDomainを捨てることができます。

あなたのメインAppDomainとコンパイルAppDomainの間の正確なインターフェースは、あなたの質問に詳細を提供していないので、私がコメントすることはできません。

+0

私はホストがAssembly.Loadを使ってプラグインDLLをロードしてからインタフェースに呼び出すと思います。これはすべて同じAppDomainで起こり、新しいものを開始するのは難しいです:ホストapiはマーシャリングしません:( –

+0

あなたのコメントは実行時にxamlのコンパイルを示唆していますか?私はこれがコンパイル時に行われたと思った... –

関連する問題