"Добавить как ссылку" для файлов JavaScript, возвращающих 404 в отладке
Используя веб-приложение Visual Studio 2010 ASP.net, у меня есть несколько проектов, в которых есть файлы JavaScript/css. Наиболее логичным способом обмена этими файлами является размещение файлов в одной папке, и каждый из них включает их в параметр "Добавить как ссылку". Однако, если я добавлю файлы таким образом, когда я отлаживаюсь с использованием сервера разработки Visual Studio или отладки с использованием локального веб-сервера IIS, все запросы на эти файлы возвращают 404 Not Found errors. Если я опубликую сайт, файлы будут скопированы, но это, очевидно, не поможет при отладке.
Есть ли что-то, что мне не хватает, или это ошибка в части VS?
Ответы
Ответ 1
Чтобы решить эту проблему некоторое время назад, я создал пакет MSBuild.WebApplication.CopyContentLinkedFiles 'nuget. Этот пакет добавляет цель MsBuild, которая копирует все файлы содержимого, добавленные в качестве ссылки на папку проекта во время сборки.
Примечание. Если вы используете исходный элемент управления, лучше добавить скопированные файлы (из папки веб-приложения), чтобы игнорировать список.
Ответ 2
Я бы не назвал это неудачным, так как вы просили об этом в первую очередь: связанные элементы в проектах Visual Studio фактические ссылки на внешние файлы. Эти файлы могут находиться в любом месте на диске и не копироваться в папку проекта.
Возможно, вы захотите скопировать эти файлы локально самостоятельно во время события pre-build. Таким образом, файлы будут синхронизированы, и вы не будете дублировать их до первого компиляции.
Ответ 3
Проблема заключается в том, что веб-сайт работает прямо из исходных папок, а не из папки bin. Это означает, что файл будет отсутствовать, независимо от того, скопирован ли он в выходную папку.
Вероятно, что работа с локальным или удаленным веб-сервером не будет иметь этой проблемы, хотя я не получил этого, и я не хочу добавлять IIS на свою локальную машину, если мне это не нужно.
Добавление команды pre-build copy действительно сработало. Обратите внимание, что текущий каталог будет папкой bin. (Вы можете использовать cd
для эха текущего каталога в окне сборки, если вы хотите его увидеть):
Если файл находится в другом решении, ваша команда будет выглядеть примерно так: (три ..
s: один, чтобы выйти из каждой папки bin, project и solution):
copy ..\..\..\OtherSolution\OtherProject\Scripts\MyJSFile.js ..\Scripts\
Если он находится в том же решении, но другой проект:
copy ..\..\OtherProject\Scripts\MyJSFile.js ..\Scripts
Одна из незначительных проблем заключается в том, что ссылка на файл столкнется с новой копией файла, даже если вы не добавите его в свой проект. Пока вы делаете ссылку сначала, она работает. Если вы сначала скопировали файл, вам придется вручную удалить копию, а затем обновить проводник решений до того, как сможете добавить ссылку.
Ответ 4
Выберите ссылку в обозревателе решений, затем просмотрите окно свойств и установите Копировать в выходной каталог для копирования всегда. Связанным элементам установлено значение "Не копировать" по умолчанию.
Кстати, вы можете копировать многие файлы в виде ссылок очень легко непосредственно из Обозревателя решений при использовании расширения VSCommands 2010.
Ответ 5
Смотрите это сообщение в блоге о простом дополнении к вашему файлу проекта.
http://mattperdeck.com/post/Copying-linked-content-files-at-each-build-using-MSBuild.aspx