Скопировать в выходной каталог в csproj с транзитивными зависимостями
У меня есть проект A и проект B. Проект A зависит от проекта B. B содержит файл базы данных (.mdf), который я хотел бы прикрепить в A.
Для этого я просто использую
<add name="myDB"
connectionString="Data Source=(LocalDB)\mssqllocaldb;
AttachDbFilename=|DataDirectory|\myDB.mdf;
Database=some_alias_for_myDB;
Integrated Security=True" />
Затем я строю проект A и запускаю его, и он успешно использует myDB
, Тем не менее, я хочу, чтобы каждый раз, когда я начинаю проект А, начинать с новой копии myDB
, Если myDB.mdf
был частью проекта А, я бы просто поместил свойство Copy to Output Directory : Copy Always
на myDB.mdf
, В случае, когда myDB.mdf
транзитно получено, стоимость имущества Copy to Output Directory
не имеет значения для проекта А.
PS Я также пробовал события перед сборкой, чтобы очистить свой проект перед его сборкой - не работает, потому что запуск проекта А, когда он не модифицирован, не запускает сборку, поэтому очистка не производится.
2 ответа
В конце концов я решил добавить ссылку на общий файл. Так что в моем проекте A I есть относительная ссылка ../B/myDB.mdf
, Это не лучшее решение, imo, так как проект теперь ссылается на что-то вне его доменной папки, однако кажется, что он лучше, чем пользовательские сценарии копирования.
По сути, это нормальное поведение для файлов данных. Они копируются только в целевую папку, если проект собран, что происходит только в случае изменения источника. Вы можете настроить процесс сборки так, чтобы каждый раз вызывать сборку, но это не очень хорошее решение и без необходимости добавляет время сборки в ваш проект, когда ничего не изменилось.
Вероятно, самое простое решение этой проблемы - скопировать файл перед его открытием, чтобы при запуске он всегда возвращался в исходное состояние. Оптимально, вы даже копируете его в пользовательскую папку, потому что у вас возникнут проблемы, если вы откроете файл в вашей папке bin в режиме чтения / записи, когда программа запустится вне отладчика на пользовательском компьютере (программе обычно не разрешается записать в каталог "Program Files" или его подпапки).