J'ai un projet d'application web. J'ai généré la DLL et l'importe dans un autre projet. J'ai implémenté VirtualPathProvider
.
J'ai suivi ce site Web: http://support.Microsoft.com/kb/910441/en-us?spid=8940&sid=global et tout fonctionne jusqu'à ce que j'ajoute un autre maître de site.
site_export.master
et modifié son action de génération en ressource intégrée.GetManifestResourceStream()
renvoie null
lorsque je charge site_export.master
.GetManifestResourceNames()
pour vérifier si site_export.master
existe dans DLL et c'est le cas. C'est dans la liste. Tous les espaces de noms correspondent. Je n'ai pas énuméré l'espace de nom ici.Pourquoi GetManifestResourceStream()
ne peut-il pas charger mon nouveau site_export.master
? Il charge site.master
très bien. Je sais que ma DLL est chargée car je peux voir d'autres fichiers dans la DLL.
Rappelez-vous les problèmes suivants ...
Étape 1. Construire un jeu d’actions sur une ressource incorporée voir
GetManifestResourceStream Gotcha de C #
Étape 2. Utilisez namespace.resourcename
voir GetManifestResourceStream () renvoie null?
En fait, cette méthode renvoie la valeur null si une ressource privée d'un autre assembly est utilisée et si l'appelant n'a pas ReflectionPermission
avec l'indicateur ReflectionPermissionFlag.MemberAccess
.
Soupçon de côté. Pour vous assurer que vous êtes dans la bonne assemblée et avec le bon nom: exportez et évaluez toutes les ressources disponibles dans votre assemblée cible
string[] names = Assembly.GetManifestResourceNames();
(dans mon cas, j'ai mal utilisé un espace de noms d'une autre assemblée)
J'ai fait ça pour que ça marche:
Étape 1: Sélectionnez la ressource (CRDF.xsl dans mon cas) et cliquez avec le bouton droit de la souris sur> Propriétés . Définissez l’action de construction sur "EmbeddedResource" et le nom logique sur le nom de votre choix, par exemple. CRDFXSL.
Étape 2: / Modifiez votre code source comme suit:
Assembly _Assembly;
_Assembly = Assembly.GetExecutingAssembly();
xslStream = _Assembly.GetManifestResourceStream("CRDFXSL");
_xmlReader = XmlReader.Create(xslStream);
Ainsi tout est allé smoooooooth ..
Astuce et précaution: Si le "nom de l'assembly" et "l'espace de nom par défaut" ne correspondent pas dans le fichier projet, alors GetManifestResourceStream renvoie null GetManifestResourceNames renvoie toujours les noms des assemblys mais pendant le chargement, le manifeste ne fonctionnerait pas.
Essaye ça:
Dim ctx As Windows.ApplicationModel.Resources.Core.ResourceContext = New Windows.ApplicationModel.Resources.Core.ResourceContext()
ctx.Languages = {Globalization.CultureInfo.CurrentUICulture.Name}
Dim rmap As Windows.ApplicationModel.Resources.Core.ResourceMap = Windows.ApplicationModel.Resources.Core.ResourceManager.Current.MainResourceMap
Dim res = rmap.GetValue("Assets/sample.png", ctx)
Dim resFile = Await res.GetValueAsFileAsync
Le Windows.ApplicationModel.Resources.Core.ResourceManager.Current.MainResourceMap
liste toutes les ressources.