1

XMLファイルをロードし、さらにそれを解析するために次のことを行っているSilverlightアプリケーションがあります。

Build Action を Embedded Resource に設定し、Copy to Output Directory に設定しました。
私が使用しているコードは次のとおりです。

try
            {
                Xmlfile = XDocument.Load(Assembly.GetExecutingAssembly().GetManifestResourceStream("file.xml"));
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

例外として受け取るメッセージ:
値を null にすることはできません。
パラメータ名: 入力

編集

(WPFで)動作する次のことを試しましたが、Silverlightで問題が発生しました:

Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + ".file.xml")

エラー:

'System.Reflection.Assembly.GetName()' is inaccessible due to its protection level
4

2 に答える 2

1

まだ答えはありませんが、Silverlight5アプリでは「解決策」を追加しても機能しません。

提供されたコードをSilverlight5.0プロジェクトに準拠させると、コンパイル時の保護レベルのために「System.Reflection.Assembly.GetName()」にアクセスできなくなります。

記録のために、私は次のような同様のエラーを受け取ります:

System.Reflection.Assembly.GetName();
System.Reflection.Assembly.GetEntryAssembly()
<someAssembly>.GetReferencedAssemblies()

他のGetName()オーバーロードについても、同じ保護エラーが発生します。

<someAssembly>.GetType(fullyQualifiedTypeName, false, true);

'System.Reflection.Assembly.GetType(string、bool、bool)'は、保護レベルが原因でアクセスできません

保護レベルのエラーは、Silverlightアプリが部分的に信頼されているコードであり、その性質上、Reflectionには高い信頼が必要であるという事実に起因していると思われます。しかし、結局、私はMicrosoftのコードウォールの背後にあるものについて推測しているだけです。

Silverlight 5 Webアプリに組み込まれたときに無効化/保護されるアセンブリに対するC#リフレクションのどの部分を説明するMSDNまたはどこかに記事がありますか?

于 2012-09-25T15:00:00.253 に答える
1

次のように、アセンブリとそのサブフォルダの名前を前に付ける必要があります。

string assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
XDocument.Load(assemblyName + ".subfolder.file.xml");

サブフォルダがどうあるべきかが明確でない場合があります。その場合は、これを使用して名前を直接調べてください。

string[] names = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
于 2012-04-05T08:11:25.993 に答える