Как скопировать файлы из структуры ссылочной сборки в локальную структуру

Я строю библиотеку, которая имеет некоторые зависимости, которые не компилируются (пример: файлы javascript и css).

Я хотел бы, чтобы зависимые файлы автоматически создавались или копировались в структуру потребляющего проекта при обращении к библиотеке - динамически во время ссылки.

Благодаря моим исследованиям я нашел способы сделать это с помощью сценариев до и после сборки для потребляющего проекта, но я действительно хочу сделать следующее:

  • В Consumer, добавить ссылку на библиотеку
  • Выполняет код, который копирует все соответствующие файлы *.js и *.css из структуры папок библиотеки в структуру папок получателя.
  • Если копия недоступна, я бы согласился с выполнением кода для создания соответствующих файлов в Consumer.

Опять же, я хотел бы избежать сценариев до и после сборки, если смогу - в конце дня мне нужно, чтобы потребитель установил файлы js и css из библиотеки, чтобы отображение и выполнение работали без принуждения потребителя к вручную переместите эти файлы.

Спасибо за любую предложенную помощь.

1 ответ

Решение

Как сказал Ганс в своем комментарии: просто вставляйте их как ресурсы в сборку. Делать это для javascript, css и изображений довольно тривиально.

  1. Перейдите к свойствам файла (js/css/images) и установите для его действия "Копировать в вывод" значение "Не копировать" и "Создать действие для встроенного ресурса".
  2. В файле AssemblyInfo.cs вашего проекта сборки добавьте такие строки, как:

    [Assembly: WebResource("MyAssembly.Javascript.MyJavascript.js", "application/javascript", PerformSubstitution = false)]

  3. Чтобы добавить 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.

Другие вопросы по тегам