Как скопировать файлы из структуры ссылочной сборки в локальную структуру
Я строю библиотеку, которая имеет некоторые зависимости, которые не компилируются (пример: файлы javascript и css).
Я хотел бы, чтобы зависимые файлы автоматически создавались или копировались в структуру потребляющего проекта при обращении к библиотеке - динамически во время ссылки.
Благодаря моим исследованиям я нашел способы сделать это с помощью сценариев до и после сборки для потребляющего проекта, но я действительно хочу сделать следующее:
- В Consumer, добавить ссылку на библиотеку
- Выполняет код, который копирует все соответствующие файлы *.js и *.css из структуры папок библиотеки в структуру папок получателя.
- Если копия недоступна, я бы согласился с выполнением кода для создания соответствующих файлов в Consumer.
Опять же, я хотел бы избежать сценариев до и после сборки, если смогу - в конце дня мне нужно, чтобы потребитель установил файлы js и css из библиотеки, чтобы отображение и выполнение работали без принуждения потребителя к вручную переместите эти файлы.
Спасибо за любую предложенную помощь.
1 ответ
Как сказал Ганс в своем комментарии: просто вставляйте их как ресурсы в сборку. Делать это для javascript, css и изображений довольно тривиально.
- Перейдите к свойствам файла (js/css/images) и установите для его действия "Копировать в вывод" значение "Не копировать" и "Создать действие для встроенного ресурса".
В файле AssemblyInfo.cs вашего проекта сборки добавьте такие строки, как:
[Assembly: WebResource("MyAssembly.Javascript.MyJavascript.js", "application/javascript", PerformSubstitution = false)]
Чтобы добавить javascript на страницу (из пользовательского элемента управления или из любой другой сборки), добавьте следующее:
String location = Page.ClientScript.GetWebResourceUrl (this.GetType (), "MyAssembly.Javascript.MyJavascript.js");
StringBuilder startup = new StringBuilder (String.Empty); startup.Append (@ ""); startup.Append ("");
Page.Header.Controls.Add (new LiteralControl (startup.ToString ()));
Обратите внимание на параметр PerformSubstitution в директиве WebResource. Это позволяет вам помещать такие вещи во встроенные файлы CSS:
.ribbonGroupLeft {
width: 3px;
height: 85px;
background-image: url(<%=WebResource("MyAssembly.images.RibbonGroupLeft.png") %>);
background-repeat: no-repeat;
overflow: hidden;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
}
URL указывает на изображение, расположенное внутри сборки. Если для параметра PerformSubstitution задано значение true,.net автоматически установит URL-адрес в правильное местоположение.
Как примечание, все основные поставщики управляющих библиотек делают что-то в соответствии с вышесказанным. Прекрасно работает, если вы помните, чтобы сделать шаг 1.