Ich hoffe, dass es nur etwas einfaches ist, dass ich hier vermisse. Ich versuche, zwei separate Projekte zu haltenWie kann ich zwei separate Projekte verwalten, aber sie zu einer DLL zusammenführen?
ProjectName.Core &
ProjectName.Infrastructure
Das in einer typischen Zwiebel Architektur hergestellt ist, so kann ich locker Paar meiner Dienste und eine größere Flexibilität gewinnen. Das Infrastrukturprojekt verweist auf das Core-Projekt. Einmal kompiliert, erzeugen sie diese DLLs
ProjectName.Core.dll &
ProjectName.Infrastructure.dll
Aber ich möchte, dass es nur 1 DLL erzeugt.
ProjectName.Infrastructure.dll (or even ProjectName.dll)
Ich habe versucht, ILMerge zu verwenden, um diese Operation auszuführen, aber da Core Infrastructure Referenzen es eine Ausnahme auslöst, weil es den Core-DLL nicht finden kann. Es sieht offensichtlich nicht in sich selbst aus.
Jetzt muss ich die einzelnen Projekte erhalten, weil ich einige andere Kombinationen haben, die Core- und ein anderes Projekt verweisen, die zusammen wie
verbunden werdenProjectName.Core &
ProjectName.DataAccess &
ProjectName.Web
EDIT: Meine aktuelle Lösung zuruft ILMerge mit ein Nant-Build-Skript. Es wurde erfolgreich zusammengeführt. Aber wenn ich versuche, die zusammengeführte DLL zu verwenden, wird eine Ausnahme ausgelöst, weil die Core-Bibliothek nicht gefunden werden kann.
<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>
Um ein wenig klarer zu sein. Ich kann Objekte aus der Core-Bibliothek, aber nicht aus der Infrastruktur-Bibliothek verwenden. Wenn .NET versucht, eines dieser Objekte zu instanziieren, versucht es anscheinend, die Abhängigkeit zu laden, kann sie jedoch nicht finden.
Oder Sie könnten nur zwei DLLs versenden und damit fertig sein. Nur gesagt ... –
Das stimmt auch. Wir liefern heute mit allen DLLs und ich versuche, es für die Benutzer zu vereinfachen. –