16

「C:\temp\test.dll」など、ファイル システムのどこかにアセンブリがあります。そのアセンブリには、「abc.xaml」などの ResourceDictionary があります。

その ResourceDictionary を取得するにはどうすればよいですか? たぶん、反射を使用する方法はありますか? これまで解決策が見つかりませんでした。

前もって感謝します!

編集:スタイルなど、ディクショナリのリソースにアクセスしたいことを追加したかっただけです。

4

3 に答える 3

20

実際には、次のように Uri を記述する必要があります。

Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(@"pack://application:,,,/test;component/myresource.xaml");
于 2009-05-28T07:30:32.203 に答える
10

編集: ResourceDictionaries で動作するさらに優れたソリューションを見つけました:

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

さて、ResourceDictionaries で動作させることができなかったので、代わりに古き良き Resource Files を使用しています ;) 興味のある方のために、私が行った方法を次に示します。

Assembly a = Assembly.LoadFile(@"C:\temp\test.dll");
ResourceManager rm = new ResourceManager("NameOfResource", a);
object o = rm.GetObject("xyz");

イアンが提案したように、リフレクターで「NameOfResource」を取得できます。

于 2009-04-03T07:56:16.797 に答える
2

リフレクターを手に入れる(ルッツから渡された)。それを使用して、その中のリソースのアセンブリと名前空間などを確認します。

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

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();
    }
}
于 2009-04-02T10:16:45.087 に答える