Страницы

Поиск по вопросам

четверг, 25 октября 2018 г.

Проверка на отсутствие циклических ссылок при сборке из нескольких проектов

Некоторые компоненты слабо связанного кода находятся в одной сборке. Хотелось бы контролировать отсутствие между ними циклических ссылок на этапе компиляции, не разбивая сборку. Наиболее логичным решением выглядит использование нескольких проектов сборок, которые потом компилируются в одну сборку. Циклические ссылки предотвращаются стандартным механизмом работы проектов, а сборка сливается.
Есть ли такая технология для Microsoft Visual Studio?


Ответ

Вы можете попробовать компилировать не в целую сборку (.dll), а в объектный файл (.netmodule). Для этого нужно или строить при помощи msbuild, либо открыть файл проекта вручную, найти строку вида Library и поменять её на Module. (Учтите, компиляция этого через Visual Studio считается неподдерживаемым сценарием. Но у меня работало.)
Затем, для компоновки модулей в assembly вам нужно вручную вызвать компоновщик. Например, в каком-либо post-build step'е:
call "%VS120COMNTOOLS%vsvars32.bat" set M1=$(SolutionDir)Module\$(OutDir)Module.netmodule set M1PDB=$(SolutionDir)Module\$(OutDir)Module.pdb set M2=$(SolutionDir)Main\$(OutDir)Main.netmodule set ENTRY=Main.Program.Main link /ltcg /assemblymodule:"%M1%" "%M2%" /entry:%ENTRY% /subsystem:CONSOLE /out:"$(SolutionDir)Program.exe" /debug copy /b %M1% "$(SolutionDir)" copy /b %M1PDB% "$(SolutionDir)"
Разумеется, вам придётся подставить нужные пути вручную.
Вот большое исследование по теме вопроса.
(Уверен, это всё можно автоматизировать при помощи msbuild, но я не знаю, как именно.)

Комментариев нет:

Отправить комментарий