Подтвердить что ты не робот

Обработка обычных файлов JavaScript в Visual Studio 2010

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

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

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

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

4b9b3361

Ответ 1

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

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

Решение

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

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

Ответ 2

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

Вы можете убедиться, что Visual Studio копирует все связанные файлы туда, куда вы поместили ссылку в Visual Studio Solution Explorer, добавив это в конец вашего файла .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

Ответ 3

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

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

Ответ 4

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

У меня есть файл 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

Ответ 6

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

Ответ 7

В этом сообщении блога описано альтернативное решение ответа @beardtwizzle:

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

Идея аналогична:

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

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

Ответ 8

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

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

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

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

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

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

Ответ 9

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

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