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 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.
Надеюсь, это поможет