Общие файлы в выходных каталогах в программе на C # - PullRequest
3 голосов
/ 02 февраля 2010

У моего решения VS2008 есть следующие настройки.

  • Program1
  • Program2
  • Common.dll (используется и упоминается как Program1, так и Program2)

В режиме отладки я предпочитаю указывать в выходном каталоге Program Files \ Productname, потому что некоторый код получит путь exe по разным причинам.

Моя проблема в том, что Program1 при компиляции выдаст ошибку, что не сможет скопировать Common.dll, если Program2 запущен. И наоборот.

Раздражает то, что я даже не делаю изменения в Common.dll так часто, но 100% времени он будет пытаться скопировать его, а не только при наличии изменений. В итоге мне приходится закрывать все программы, а затем собирать и запускать их.

Итак, мой вопрос: как я могу заставить VS2008 копировать Common.dll, если в проекте Common.dll есть изменения?

Ответы [ 5 ]

1 голос
/ 27 марта 2010

Я попробовал следующее, и я думаю, что это показывает поведение, которое вы ищете:

  • изменить вывод проекта common.dll на Program Files \ Productname (т.е. то же самое, что program1 и program2
  • в проекте program1 и program2: установите для «copy local» значение false для ссылки на common.dll

Таким образом Visual Studio пытается скопировать файл common.dll только в случае изменения исходного кода.

1 голос
/ 02 февраля 2010

Вместо изменения вашего выходного каталога, чтобы вы знали местоположение вашего исполняемого файла, почему бы не использовать:

System.Reflection.Assembly.GetExecutingAssembly().Location
1 голос
/ 02 февраля 2010

Почему бы просто не ссылаться на Common.dll в Program1 и Program2 вместо копирования DLL? Таким образом, последняя версия всегда доступна и всегда компилируется с приложением? Кроме того, вы можете отладить из Program1 / 2 в Common.dll?

0 голосов
/ 30 марта 2010

Все, что я делаю (по причинам отладки), - это создание папки bin на уровне решения и изменение Путь вывода на вкладке Build параметров проекта на всех проецирует по общему пути, то есть «bin \ Debug \» на «solution \ bin \ debug» (где solution - это путь решения).

Сделайте это для каждой «конфигурации», например, "решение \ bin \ release" и т. д.

Пусть Visual Studio позаботится о файле обновлений и т. Д.

ПРИМЕЧАНИЕ Если вы находитесь в процессе отладки приложения, вы все равно не сможете скопировать новый файл, он заблокирован и т. Д. *

ПК: -)

0 голосов
/ 25 марта 2010

Поместите что-то подобное в ваш проект Common.DLL

copy $(TargetPath) $($ProjectPath)..\..\Program1\
copy $(TargetPath) $($ProjectPath)..\..\Program2\

И ссылаться на них из соответствующих мест.

В идеале вы должны объединить все три проекта в одно решение и ссылаться на проекты, а не на библиотеки DLL, создать полное решение и затем запустить его. Это позаботится обо всем этом автоматически:)

...