Почему Visual Studio копирует библиотеки DLL / EXE-файлов в папки сборки проектов, на которые ссылаются, в C #? - PullRequest
0 голосов
/ 06 июля 2019

Скажите, у меня есть четыре проекта:

A В С D

такой, что ссылки A, B, ссылки B, C и ссылки C. D.

В Visual Studio (2017) выясняется, что здание A также запускает сборку в B, C, D, как и ожидалось. Он строит их только один раз. Однако, похоже, что сборка копирует библиотеки DLL в каждый каталог bin проектов, в результате чего структура каталогов (при условии сборки в режиме отладки) выглядит примерно так:

A -> бункер -> Отладка -> A.exe, B.exe, C.exe, D.exe

B -> бункер -> Отладка -> B.exe, C.exe, D.exe

C -> бункер -> Отладка -> C.exe, D.exe

D -> бункер -> Отладка -> D.exe

Кажется, это подразумевает, что существует O (n ^ 2), где n - это количество проектов (и они ссылаются друг на друга, например, так) с точки зрения количества скопированных исполняемых файлов / библиотек . Это приводит к ужасному масштабированию времени сборки в зависимости от количества проектов. Однако наличие большего количества проектов становится очень необходимым для увеличения степени детализации файлов.

В худшем случае для n проектов добавление другого проекта приводит к (n + 1) дополнительным копиям файла с использованием формулы (1 + 2 .. + n) = (n (n + 1)) / 2.

Почему Visual Studio делает это? Почему бы просто не скопировать только в каталог bin А? Единственное преимущество, которое я вижу в текущем подходе, состоит в том, что вы можете запускать DLL / EXE в папках bin B, C и D.

1 Ответ

0 голосов
/ 07 июля 2019

Похоже, это поведение можно отключить.Имя для этого - свойство copylocal в visual studio.Если вы отключите эту функцию, то теперь вы несете ответственность за ручное копирование библиотек DLL в папку вывода (например, с помощью пользовательского шага MSBuild).

Эти вопросы хорошо с этим справляются:

Какова лучшая практика для "Копировать локальный" и со ссылками на проекты?

Лучшие практики для больших решений в Visual Studio (2008)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...