В Visual Studio вы можете сделать Add
→ Existing Item
, а затем Add as Link
с помощью кнопки Add
.
Это здорово. Это позволит вам добавить файл из другого проекта, и редактирование файла также редактирует его в исходном проекте.
Я хотел бы использовать эту функцию, чтобы иметь файл конфигурации (с именем Shared.config) во всех проектах в одном решении. И этот файл всегда будет таким же.
решение |
| - проект 1
|
- Shared.config [физическое]
| - проект 2
|
- Shared.config [связанный]
После публикации файл действительно попадает во все опубликованные проекты, поэтому проблем нет.
Но перед публикацией (во время разработки на сборке) связанный файл на самом деле не существует. Попытка увидеть файл в проводнике Windows доказывает, что файл отсутствует в каталоге проекта. Visual Studio только заставляет его выглядеть так, как будто он существует в проводнике решений.
(Хотя при сборке связанные элементы, вероятно, скопированы в каталог bin
, но я не хочу использовать/получать доступ к файлам из каталога bin
.)
Теперь это дает проблемы с курса. Попытка распечатать System.IO.File.ReadAllText(HttpContext.Current.Server.MapPath("Shared.config"))
завершится с ошибкой до того, как проект будет опубликован, из-за того, что Shared.config еще не существует в корневом каталоге проекта.
Что я хотел бы сделать, и где мне нужна ваша помощь:
- Я бы хотел, чтобы ON BUILD скопировал все связанные файлы из их исходного местоположения в целевое местоположение.
Это сделает визуальную студию связанным файлом и копией оригинала, чтобы существовать как в том же каталоге с тем же именем.
Обычно VS не позволит вам создать связанный элемент в каталоге, если этот каталог уже содержит файл с тем же именем.
Но, я тестировал, сначала создав связанный элемент; затем с помощью проводника Windows скопируйте исходный файл в целевой каталог и посмотрите, как работает Visual Studio. Исследователь решений просто скрывает физический файл и показывает связанный элемент вместо него. (Даже если вы нажмете Show all files
в проводнике решений.)
решение |
| - проект 1
|
- Shared.config [физическое]
| - проект 2
|
- Shared.config [связанный]
|
- Shared.config [физический, скопированный здесь во время сборки, невидимый в Solution explorer]
Это именно то, что я хочу! При попытке отредактировать файл Visual Studio откроет "связанный элемент". И при сборке физический файл будет скопирован в целевой каталог, чтобы он существовал для кода, который пытается получить к нему доступ.
Теперь, как мне это сделать? Должно ли это быть сделано с событиями Build? Если да, то как я могу сказать "копировать оригиналы всех связанных файлов в их целевой каталог?