У меня есть решение в Visual Studio с 5 проектами. Они:
Foo.Core
: Базовая функциональностьFoo.Api
: Сгенерированный код создается сверху ядраFoo.Web
: Определенные для сети расширенияFoo.Web.Mvc
: MVC-определенные расширенияNewtonsoft.Json
: Сторонняя библиотекаЯ хочу использовать ILMerge для слияния Foo.Core
, Foo.Api
и Newtonsoft.Json
в единственный блок, названный Foo
. Это - легкая часть.
Проблема, с которой я сталкиваюсь, является этим Foo.Web
и Foo.Web.Mvc
обе потребности сослаться на все три из объединенных блоков.
Если я сошлюсь на исходные блоки, то у них будут недопустимые ссылки после того, как я сделаю ILMerge.
Если я ссылаюсь на блок ILMerged, я должен сослаться на блок отладки и затем изменить его, прежде чем я упакую все, которое не кажется идеальным.
Я попытался создать названный проект Foo
, который ссылается на 3 объединенных блока и заменяет его собственный вывод блоком ILmerged, но это, кажется, не работает вообще.
Существует ли надежный способ сделать это?
ILMerge предназначен для создания нового пакета/компонента в виде коробочного «продукта» (API, Program...) для упрощения управления сборками, таких как развертывание, ссылки на GAC, видимость сборки и многое другое либо для использования «все в одном», либо для внешнего использования, а не смешанного.
Я предполагаю, что вам нужно настроить PostBuildEvent
на вашей основной сборке/проекте (Foo.Api
?), если у вас есть один или PreBuildEvent
в ваших проектах Foo.Web
и Foo.Web.Mvc
для создания объединенного проекта Foo
, на который будут ссылаться в ваших проектах Foo.Web
и Foo.Web.Mvc
как на внешнюю сборку.
Вы можете сделать это более интегрированным в Visual Studio, настроив задачу MsBuild. Образец (из Перелив стека).