Я надеюсь, что здесь просто что-то простое, чего я здесь не хватает. Я пытаюсь сохранить два отдельных проектаКак я могу поддерживать два отдельных проекта, но объединить их в одну DLL?
ProjectName.Core &
ProjectName.Infrastructure
Это сделано в типичной архитектуре лук, так что я могу свободно пара свои услуги и получить большую гибкость. Проект «Инфраструктура» ссылается на основной проект. После компиляции они генерируют эти DLL
ProjectName.Core.dll &
ProjectName.Infrastructure.dll
Но я хотел бы, чтобы он генерировал только 1 dll.
ProjectName.Infrastructure.dll (or even ProjectName.dll)
Я пытался использовать ILMerge, чтобы выполнить эту операцию, но так как ссылки Инфраструктура Ядро это бросает исключение, потому что он не может найти DLL Core. Очевидно, он не смотрит в себя.
Теперь мне нужно поддерживать отдельные проекты, потому что у меня есть некоторые другие комбинации, которые ссылаются на сердечник и другой проект, который будет объединен такими как
ProjectName.Core &
ProjectName.DataAccess &
ProjectName.Web
EDIT: Мое текущим решение окликает ILMerge с использованием сценарий сборки Nant. Он успешно объединился. Но когда я пытаюсь использовать объединенную DLL, он генерирует исключение, потому что он не может найти библиотеку Core.
<target name="merge.core">
<property name="temp.dir" value="${build.dir}\Temp\"/>
<mkdir dir="${temp.dir}" if="${not directory::exists(temp.dir)}"/>
<property name="tools.dir" value=""${directory::get-current-directory()}\Tools\""/>
<exec program="Tools\ILMerge\ILMerge.exe" workingdir=".">
<arg value="/t:Library"/>
<arg value="/ndebug"/>
<arg value="/out:"${build.dir}\Temp\ProjectName.Infrastructure.dll""/>
<arg value=""${build.dir}ProjectName.Core.dll""/>
<arg value=""${build.dir}Xceed.Compression.dll""/>
<arg value=""${build.dir}ProjectName.Infrastructure.dll""/>
<arg value=""${build.dir}ProjectName.Infrastructure.XmlSerializers.dll""/>
</exec>
<delete file="${build.dir}ProjectName.Core.dll"/>
<delete file="${build.dir}Xceed.Compression.dll"/>
<delete file="${build.dir}ProjectName.Infrastructure.dll"/>
<delete file="${build.dir}ProjectName.Infrastructure.XmlSerializers.dll"/>
<move file="${build.dir}\Temp\ProjectName.Infrastructure.dll" tofile="${build.dir}ProjectName.Infrastructure.dll"/>
<delete dir="${temp.dir}" if="${directory::exists(temp.dir)}"/>
</target>
Чтобы быть немного более понятным. Я могу использовать объекты из библиотеки Core, но не библиотеки Infrastructure. Поскольку, когда он пытается создать экземпляр одного из этих объектов, кажется, что .NET пытается загрузить зависимость, но не может ее найти.
Или вы можете просто отправить две библиотеки DLL и сделать это. Просто говорю ... –
Это также верно. Мы, безусловно, поставляем со всеми DLL сегодня, и я пытаюсь упростить его для пользователей. –