Assembly myAssembly = // Get your assembly somehow (see below)...
IList<string> resourceNames = myAssembly.GetManifestResourceNames();
Это вернет список всех имен ресурсов, которые были установлены как «Встроенный ресурс». Имя, как правило, является полностью квалифицированным пространством имен, куда вы помещаете этот JS-файл. Так что, если ваш проект называется My.Project
, и вы храните файл MyScript.js
внутри папки в вашем проекте под названием Resources
, полное имя будет My.Project.Resources.MyScript.js
Если после этого вы хотите использовать этот JS файл:
Stream stream = myAssembly.GetManifestResourceStream(myResourceName);
Где Аргумент myResourceName может быть «My.Project.Resources.MyScript.js». Чтобы получить этот файл JS в этом объекте поток, вам нужно записать его в виде файла на жестком диске, и служить ей с вашего сайта, как статический файл, что-то вроде этого:
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();
}
И код для метода 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);
}
}
Вы можете придерживаться всего этого кода в событии Application_Start в вашем Global.asax. Вы не хотите, чтобы работать для каждого запроса
Теперь получить ссылку на вашу Ассамблею другого дела, есть много способов.Один из способов состоит в том, чтобы включить весь приведенный выше код в вашу Ассамблею, а затем убедитесь, что вы ссылаетесь на эту сборку из основного проекта WebApp в Visual Studio, а затем получаете ссылку на выполняемую в настоящее время Ассамблею.
namespace My.Project
{
public class ResourceLoader
{
public static void LoadResources()
{
Assembly myAssembly = Assembly.GetExecutingAssembly();
// rest of code from above (snip)
}
}
}
Затем вызовите ResourceLoader.LoadResources() из вашего мероприятия Application_Start в вашем Global.asax.
Надеется, что это помогает
Спасибо за ответ, я пытаюсь его. Что такое m_scriptCache? – opaera
Я не могу понять, как это работает. Не могли бы вы привести пример? У меня этот WebResource указан в файле AssemblyInfo: 'TestResources.Assembly.CheckAnswer.js'. – opaera
Я пытаюсь, но GetManifestResourceNames() возвращает пустую коллекцию. – opaera