53

XSD を使用してカスタム構成セクションを作成しました。この新しいスキーマに従う構成ファイルを解析するために、次のようにリソース (.xsd ファイル) を読み込みます。

public partial class MonitoringConfiguration
    {
        public const string ConfigXsd = "MonitoringAPI.Configuration.MonitoringConfiguration.xsd";
        public const string ConfigSchema = "urn:MonitoringConfiguration-1.0";

        private static XmlSchemaSet xmlSchemaSet;

        static MonitoringConfiguration()
        {
            xmlSchemaSet = new XmlSchemaSet();
            Stream xsdStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(ConfigXsd);
            XmlReader schemaReader = XmlReader.Create(xsdStream);
            xmlSchemaSet.Add(ConfigSchema, schemaReader);
        }

    }

ところで、私のリソースは MonitoringConfiguration.xsd です。もう 1 つの部分クラス (.xsd ファイルのコード ビハインドを表す) の名前空間はMonitoringAPI.Configuration.

問題は次の場所にあります。

 Stream xsdStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(ConfigXsd);

xsdStream が null なので、リソースが見つからないのでしょう。しかし、なぜ?

ありがとうございました

4

8 に答える 8

107

リソースの名前は常に次のとおりです。

<Base namespace>.<RelativePathInProject>.<FileName>

したがって、リソースが「Resources/Xsd/」にあり、デフォルトのプロジェクト名前空間が「MonitoringAPI.Configuration」である場合、リソース名は次のようになります。

"MonitoringAPI.Configuration.Resources.Xsd.MonitoringConfiguration.xsd"

また、リソースのビルド アクションが「埋め込みリソース」に設定されていることを確認してください。

于 2010-06-18T10:14:09.243 に答える
60

埋め込みリソースの実際の名前を取得する簡単で正しい方法:

string[] resourceNames =
    Assembly.GetExecutingAssembly().GetManifestResourceNames();

次に、resourceNames 配列を確認するだけで、GetManifestResourceStream メソッドに何を渡せばよいかがわかります。

于 2013-01-08T15:58:03.740 に答える
9

デフォルトでは、Visual Studio は xsd ファイルを埋め込まないため、動作させるには、xsd ファイルの「ビルド アクション」プロパティが「埋め込みリソース」に設定されていることを確認する必要があります。

于 2010-10-20T07:26:17.923 に答える
5

form1.resx の下にリソースを追加するだけです --> 既存のアイテムを追加します

リソースフォルダーの下に追加したリソースをダブルクリックします。プロパティに移動し、なしではなく「埋め込みリソース」を選択します。

次に、次の行をデバッグしてみてください。

string[] resourceNames=Assembly.GetExecutingAssembly().GetManifestResourceNames();

追加したリソースが配列内にあることを確認してください。次に、この配列からリソース名を正確にコピーし、コードに名前を付けてみてください..正常に動作します!!

于 2015-11-04T07:21:27.997 に答える
1

以下のようにリソース名を渡すことで、リソースストリームを取得できます...

  1. リソース名を取得します。

    アセンブリ objAssembly = Assembly.GetExecutingAssembly();

    string[] strResourceNames = objAssembly.GetManifestResourceNames();

  2. リソース名を渡す...

    ストリーム strm = objAssembly.GetManifestResourceStream(strResourceNames);

Stream があれば、やりたいことは何でもできます...

于 2016-10-19T12:47:33.803 に答える