19

同じアセンブリ内の同じコード行は、あるテスト フィクスチャでは機能しますが、別のテスト フィクスチャでは機能しません。コード行は次のとおりです。

var dic = new ResourceDictionary { Source = new Uri("pack://application:,,,/MyApp.Wpf;component/ImageResources.xaml") };

他のテスト フィクスチャで発生するエラーは System.UriFormatException : Invalid URI: Invalid port specified です。

uri 文字列は xaml でも機能します。コードでリソース ディクショナリを読み込むより良い方法はありますか?

乾杯、
ベリル

===更新===

この投稿で見つけたように、パック スキームが登録されていないため、無効なポートが発生していました。これは、次のようなコードで実行できます。

if (!UriParser.IsKnownScheme("pack"))
     UriParser.Register(new GenericUriParser(GenericUriParserOptions.GenericAuthority), "pack", -1);

エラーなしでパック スキームを使用してディクショナリをロードできたテスト フィクスチャは、SUT がユーザー コントロールであり、ユーザー コントロールのインスタンスが作成されるときにリソースをロードしているためだと推測しています。

4

2 に答える 2

32

私が使用しているのは、UriKindのようなものです

var resource = new ResourceDictionary
{
    Source = new Uri("/myAssemblyName;component/Themes/generic.xaml",
                     UriKind.RelativeOrAbsolute)
};

HTH

于 2010-08-24T05:26:47.313 に答える