Обработка распространенных файлов JavaScript в Visual Studio 2010 - PullRequest
43 голосов
/ 24 мая 2011

Мы начинаем работу над несколькими полностью зависимыми от JavaScript веб-приложениями (наши предыдущие приложения были ASP.NET MVC, с «добротой» JavaScript, разбросанной по всем параметрам).

У нас есть несколько файлов, которыми можно будет поделиться по всем направлениям, и было бы неплохо сохранить эти файлы в общем проекте и добавить их в виде отдельных ссылок (как это было бы возможно скомпилированным кодом).

Очевидно, что это не работает с чем-то вроде JavaScript, так как файл на самом деле не «там» в правильном месте.

У кого-нибудь есть предложения по сохранению единой версии общего файла JavaScript для использования в нескольких проектах?

Ответы [ 9 ]

49 голосов
/ 09 мая 2013

Я знаю, что эта проблема древняя, но все же хотел предложить свое решение, потому что оно немного проще, чем у beardtwizzle.

Вы можете убедиться, что Visual Studio скопирует все связанные файлы туда, куда вы поместили ссылкуОбозреватель решений Visual Studio, добавив его в конец файла .csproj:

  <Target Name="CopyLinkedContentFiles" BeforeTargets="Build">
    <Copy SourceFiles="%(Content.Identity)" 
          DestinationFiles="%(Content.Link)" 
          SkipUnchangedFiles='true' 
          OverwriteReadOnlyFiles='true' 
          Condition="'%(Content.Link)' != ''" />
  </Target>

Я описал, как это работает, в своем блоге на http://mattperdeck.com/post/Copying-linked-content-files-at-each-build-using-MSBuild.aspx

20 голосов
/ 27 мая 2011

В конце концов, вот как я этого добился.Это может быть не всем по вкусу - но мне это понравилось.

Примечание. Во всех наших проектах статические ресурсы находятся в корневом каталоге, называемом «Активы», поэтому, например, JavaScript всегда находится в / Assets./ js / и CSS /Assets/css/.

Решение

  1. В проекте, который собирается «импортировать» общий код, я просто добавляюобщий файл .js 'As Link' в /Assets/js/.
  2. Перейдите в свойства этого нового дополнения и установите для параметра «Копировать в выходной каталог» значение «Копировать, если новее».
  3. Теперь я просто редактирую командную строку проекта после сборки: xcopy / Y / E "$ (TargetDir) \ Assets" "$ (ProjectDir) \ Assets"

При сборке проекта он копирует импортированные файлы в \ bin \ Assets \ js - событие после сборки затем переносит их копии в каталог проекта - вовремя, чтобы сайт мог использоватьих.

1 голос
/ 15 мая 2014

Я также вижу, что этот вопрос древний, но подумал, что я бы добавил свои два цента ...

У меня есть файл javascript в отдельном проекте.Я добавил ссылку, и это хорошо работает для публикации, но не работает в IIS Express или Casinni.Я попытался добавить пользовательскую маршрутизацию, чтобы перехватить отсутствующий файл и вручную переназначить его, но это было немного взломано и по какой-то причине перестало работать при обновлении до MVC 5.1, поэтому вместо исправления взлома я нашел лучший способ:

System.Web.Optimization имеет комплекты javascript.

В вашем общем проекте установите Copy To Output Directory на «Всегда копировать» и Build Action на «Содержимое» в вашем js-файле.Это означает, что ваши js-файлы попадают в папку bin вашего веб-сайта.Они не могут обслуживаться оттуда (IIS не будет обслуживать что-либо в папке bin по очевидным причинам безопасности), но они могут быть включены в пакеты

using System.Web;
using System.Web.Optimization;

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {   
        bundles.Add(new ScriptBundle("~/bundles/externalLibrary").Include(
                    "~/bin/scripts/externalLibrary.js"
                    ));
    }
}

Затем вам нужно добавить это в Application_Start в вашем global.asaxфайл (прямо рядом с регистрацией маршрутов)

BundleConfig.RegisterBundles(System.Web.Optimization.BundleTable.Bundles);

, затем используйте вашу связку ссылок в вашем бритвенном cshtml:

<script type='text/javascript' src='@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/externalLibrary")'></script>

вам понадобится пакет nuget для microsoft.aspnet.web.optimization

1 голос
/ 24 мая 2011

Правильным решением является встраивание файлов javascript / css в ваш проект.Вы можете сделать это, используя WebResources.axd .Это официальный способ, которым Microsoft встраивает js в свои элементы управления.(Как и элементы управления валидацией)

Вы можете найти хороший учебник по: http://www.4guysfromrolla.com/articles/080906-1.aspx

0 голосов
/ 28 января 2015

Любой, кто столкнется с этим вопросом в будущем, должен знать, что в Visual Studio теперь есть общие проекты для решения этой проблемы.Универсальные проекты Windows используют их по умолчанию, и вы можете создать свое собственное, загрузив и установив расширение VS здесь: https://visualstudiogallery.msdn.microsoft.com/315c13a7-2787-4f57-bdf7-adae6ed54450

После загрузки расширения вы можете добавить общий проект (пустой) в свое решение.Проект можно найти в шаблонах проектов для Visual C #, Visual C ++ и JavaScript.

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

Далее вы включите общий проект в качестве общей ссылки в другие проекты этого решения, которым необходим доступ к общим файлам.Щелкните правой кнопкой мыши другой проект и выберите «Добавить ссылку на общий проект».

Теперь вы можете ссылаться на общие файлы в вашем основном проекте, как если бы файлы в общем проекте существовали там.Они скомпилированы как часть этого проекта.

Эта технология была предназначена для универсальных приложений для обмена кодом между приложениями Windows Phone и Windows Store, поэтому предупреждаем, что у вас могут возникнуть проблемы с совместным использованием в различных сценариях, но стоит попробоватьчтобы узнать, удовлетворит ли это вашу потребность.

0 голосов
/ 09 июля 2012

В этой записи блога описывается альтернативное решение для ответа @beardtwizzle:

http://consultingblogs.emc.com/jamesdawson/archive/2008/06/03/using-linked-files-with-web-application-projects.aspx

Идея похожа:

  1. Добавить общий файлк веб-проекту в виде ссылки
  2. Измените шаг сборки _CopyWebApplication в проекте, чтобы связанные файлы были скопированы с правильным путем назначения.

Таким образом, вместо события после сборкифайлы копируются с помощью модифицированного шага сборки.Для меня это решение кажется немного чище (но это может быть делом вкуса).Во всяком случае, я только что добавил это к нашему решению, и пока оно отлично работает!

0 голосов
/ 24 мая 2011

Используйте правильный контроль версий.

Храните js в одном месте, а затем просто git pull (или Equivelant Mercurial / Bazaar) возвращайте их в свой код всякий раз, когда вы обновляете свой JavaScript.

0 голосов
/ 24 мая 2011

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

0 голосов
/ 24 мая 2011

Возможно, вы могли бы использовать визуальные студийные шаблоны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...