"Добавить как ссылку" для файлов 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.