Скопировать в выходной каталог в 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" или его подпапки).

Другие вопросы по тегам