52 votes

Impossible de charger une ressource de manifeste avec GetManifestResourceStream ()

J'ai créé une section de configuration personnalisée à l'aide de XSD. Afin d'analyser le fichier de config qui suit ce nouveau schéma, je charge la ressource (mon .fichier xsd) avec ceci:

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);
        }

    }

Par la façon dont mon ressource est: MonitoringConfiguration.xsd. Et l'espace de noms de l'autre classe partielle (qui représente le code derrière de la .fichier xsd) est - MonitoringAPI.Configuration.

Le problème se trouve ici:

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

Le xsdStream est nulle, donc je suppose que la ressource ne peut pas être trouvé! Mais pourquoi?

Merci

107voto

Philippe Leybaert Points 62715

Le nom de la ressource est toujours:

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

Par conséquent, si votre ressource est située dans "Resources / Xsd /" et que votre espace de nom de projet par défaut est "MonitoringAPI.Configuration", le nom de la ressource est:

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

Assurez-vous également que l'action de génération de votre ressource est définie sur "Ressource incorporée".

57voto

user1958681 Points 211

Manière simple et correcte d’obtenir le nom réel de votre ressource incorporée:

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

Ensuite, vérifiez simplement le tableau resourceNames et vous saurez exactement quoi transmettre à la méthode GetManifestResourceStream.

9voto

Huy Thai Points 61

Par défaut, visual studio n'incorpore pas le fichier xsd. Par conséquent, vous devez vous assurer que la propriété "Action de compilation" du fichier xsd est définie sur "Ressource intégrée" pour que cela fonctionne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X