2009-04-02 10 views
16

私はファイルシステムのどこかにアセンブリを持っています。 "C:\ temp \ test.dll"。そのアセンブリにはResourceDictionaryがあります。 "abc.xaml"。アセンブリからResourceDictionaryをロードする

どうすればそのResourceDictionaryを取得できますか?おそらくリフレクションを使用する方法がありますか?私はこれまでのところ解決策を見つけられませんでした。

ありがとうございます!

編集:辞書のリソースにアクセスしたいと付け加えたいと思います。スタイル。

答えて

10

編集:私はResourceDictionariesと連携し、より良い解決策を見つけた:

Assembly.LoadFrom(@"C:\temp\test.dll"); 
ResourceDictionary rd = new ResourceDictionary(); 
rd.Source = new Uri("/test;component/myresource.xaml"); 

まあ、私はそれがResourceDictionariesで動作させることができなかったので、私が使用しています代わりに良い古いリソースファイル;) 興味がある人のために、ここで私はそれをやった:

Ianが示唆したように、Reflectorで「NameOfResource」を取得できます。

+3

+ 1いつも元気に戻って、あなたの問題をどのように乗り越えているか教えてください:) –

+0

Claraoscuraの答えを参照してください。より良い解決策です。 – scobi

+0

あなたの答えに 'UriKind'がありません。あなたが相対パスを使用している場合は、' UriKind.Relative'を指定してください。 – ANewGuyInTown

2

Reflectorのコピーを取得してください(これをLutzが今手渡しています)。これを使用して、アセンブリ内のリソースの名前空間などを調べます。

次に、このような埋め込みリソースを読み込みます。

Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); 
using (System.IO.Stream s = asm.GetManifestResourceStream(<yourname>) 
{ 
    using (System.IO.StreamReader reader = new System.IO.StreamReader(s)) 
    { 
     string xml = reader.ReadToEnd(); 
    } 
} 
+0

ありがとうございました。あなたのコードを使用すると不幸にも、私はreader.ReadToEnd()からガーベッジを取得しています。 –

+0

XAMLの外観はわかりませんが、何らかの種類のデコーダが必要ですか? –

+0

私は分かりませんが、リソースファイルを使ってこれを行いました。ご協力いただきありがとうございます! –

21

あなたは、実際にこのようにURIを記述する必要があります。

Assembly.LoadFrom(@"C:\temp\test.dll"); 
ResourceDictionary rd = new ResourceDictionary(); 
rd.Source = new Uri(@"pack://application:,,,/test;component/myresource.xaml"); 
+5

goofy Uriの構文は次のとおりです: http://msdn.microsoft.com/en -us/library/aa970069.aspx – scobi

+1

+1あなたの伝説は、完璧に動作します –

関連する問題