Assembly myAssembly = // Get your assembly somehow (see below)...
IList<string> resourceNames = myAssembly.GetManifestResourceNames();
Cela renverra une liste de tous les noms de ressources qui ont été définis comme 'Embedded Resource'. Le nom est généralement l'espace de nom complet de l'endroit où vous avez placé ce fichier JS. Donc, si votre projet est appelé My.Project
et que vous stockez votre fichier MyScript.js
dans un dossier dans votre projet appelé Resources
, le nom complet serait My.Project.Resources.MyScript.js
Si vous souhaitez ensuite utiliser ce fichier JS:
Stream stream = myAssembly.GetManifestResourceStream(myResourceName);
Où L'argument myResourceName peut être "My.Project.Resources.MyScript.js". Pour obtenir ce fichier JS dans cet objet Stream, vous aurez besoin de l'écrire dans un fichier sur le disque dur, et servez-le à partir de votre site Web comme un fichier statique, quelque chose comme ceci:
Stream stream = executingAssembly.GetManifestResourceStream(imageResourcePath);
if (stream != null)
{
string directory = Path.GetDirectoryName("C:/WebApps/MyApp/Scripts/");
using (Stream file = File.OpenWrite(directory + "MyScript.js"))
{
CopyStream(stream, file);
}
stream.Dispose();
}
Et le code pour la méthode de CopyStream:
private static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, len);
}
}
Vous pouvez coller tout ce code dans un événement Application_Start dans votre Global.asax. Vous ne voulez pas qu'il soit exécuté pour chaque requête
Maintenant, obtenir une référence à votre assembly est une question différente, il y a plusieurs façons.Une façon consiste à inclure tout le code ci-dessus dans votre assembly en question, puis assurez-vous de référencer cet assembly à partir de votre projet WebApp principal dans Visual Studio, puis obtenir une référence à l'assembly en cours d'exécution comme tel.
namespace My.Project
{
public class ResourceLoader
{
public static void LoadResources()
{
Assembly myAssembly = Assembly.GetExecutingAssembly();
// rest of code from above (snip)
}
}
}
appellent ensuite ResourceLoader.LoadResources() de votre événement Application_Start dans votre Global.asax.
Hope this helps
Merci pour la réponse, je l'essayer. Qu'est-ce que m_scriptCache? – opaera
Je n'arrive pas à comprendre comment cela fonctionne. Pourriez-vous s'il vous plaît fournir un exemple? J'ai cette WebResource spécifiée dans le fichier AssemblyInfo: 'TestResources.Assembly.CheckAnswer.js'. – opaera
J'essaye mais GetManifestResourceNames() retourne une collection vide. – opaera