J'ai une solution Visual Studio avec deux projets à l'intérieur.
Le premier projet est un service Windows, et ce projet contient un fichier XML dans un dossier (appelé Configurations). Ce fichier XML s'appelle Databases.xml. J'ai changé l'action de construction de Databases.xml de contenu à ressource intégrée, et maintenant je veux accéder à ce fichier XML à partir de mon autre projet dans ma solution, qui est une application WPF.
J'ai donc ajouté une référence à mon projet de service Windows dans mon projet WPF, et je voudrais maintenant accéder à mon fichier XML à partir de mon projet WPF.
Le problème est que lorsque j'essaie d'accéder à la ressource intégrée, je ne parviens pas à savoir quel type de ressource utiliser et quel doit être le chemin/espace de nom de mon assemblage et du fichier XML. Lorsque j'utilise la méthode
string[] names = this.GetType().Assembly.GetManifestResourceNames();
mon tableau de noms est rempli avec quelques ressources de mon projet WPF. Ce que je veux, c'est accéder aux ResourceNames et bien sûr à mon fichier Databases.xml à partir de mon projet Windows Service.
Veuillez m'aider car ce problème me rend fou.
Si vous avez besoin d'informations supplémentaires, n'hésitez pas à me le faire savoir.
Ma solution Mise à jour 26-07-2013
J'ai découvert que le vrai problème est survenu lorsque je n'ai pas pu utiliser l'espace de nom de mon premier projet de Service Windows comme type pour mon assemblage. Mon Service Windows consiste en une classe de service (avec la méthode OnStart() et OnStop() à l'intérieur), et afin d'utiliser cette classe comme type de mon espace de nom, j'ai dû ajouter une autre référence à mon projet WPF. J'avais besoin d'ajouter une référence à l'espace de nom System.ServiceProcess, afin d'utiliser ma classe de service Windows comme type pour mon assembly dans mon projet WPF.
Afin d'accéder à mon fichier Databases.xml, j'ai trouvé cette solution. N'oubliez pas d'insérer le nom de votre propre projet et le nom de votre classe au lieu de mes caractères de substitution (<Nom du projet de service Windows> etc).
//Remember to add a reference to System.ServiceProcess in order to be able to use your WIndows Service Project as an assembly type.
using (Stream stream = typeof(<Windows Service Project Name>.<Windows Service Class Name>).Assembly.GetManifestResourceStream("<Windows Service Project Name>.<Folder Name>.Databases.xml"))
{
//Load XML File here, for instance with XmlDocument Class
XmlDocument doc = new XmlDocument();
doc.Load(stream);
}
Mon vrai problème était donc que je n'avais pas inclus la référence System.ServiceProcess dans mon deuxième projet.