Возникло исключение "FileNotFoundException" из-за "Copy local = false"

У меня есть около 20 решений с 5-10 проектами в каждом, и они ссылаются друг на друга, а также на некоторые сторонние библиотеки. У меня есть папка Output, где все они созданы. Поэтому я не хочу иметь никаких копий каждой сборки, на которую ссылаются (это требования). Поэтому для каждой ссылки в одном из проектов я установил для параметра "Копировать локально" значение "false", и во время компиляции он не выдавал ошибку. Но во время выполнения он генерировал FileNotFoundException, говоря: "Не удалось загрузить файл или сборку" X "или одну из ее зависимостей. Система не может найти указанный файл". Как я читал в этой и этой ветке, вы можете указать пути для поиска в CLR, но они должны быть подпапками базовой папки приложения, и, поскольку у меня есть 10 служб Windows, это означает, что у меня будет скопировать ссылочные сборки в базовую папку каждого сервиса (не в этом суть).

Одна вещь, которую я заметил, это то, что, когда проект A имеет ссылку на проект B, копируется не только B.dll, но и C.dll (по ссылке из B), D.dll и т. Д. И странно, когда Я устанавливаю для параметра "Локальный" значение "ложь" для ссылки B и удаляю копию файла B.dll, проблем нет - ему удается найти ее в каталоге "Вывод", но когда я удаляю копию файла C.dll (или D.dll), это когда проблема возникает. Поэтому я установил для параметра "Копировать локально" значение "ложь" для ссылки C в проекте B, но это не помогло

У кого-нибудь есть идея, почему это происходит?

1 ответ

Вы должны либо:

  • Сохраните их в GAC, чтобы каждое приложение могло найти ссылки на сборки;
  • Реализовать обработчик событий для AppDomain.AssemblyResolve самостоятельно найти сборки;
  • Скопируйте все сборки в скрипте сборки в нужные папки или используйте одну центральную папку.
Другие вопросы по тегам