Merhabalar, bugün yaşadığım bir probleme yönelik bulduğum çözümü hemen payaşmak istiyorum. Basit bir uygulama geliştirdim, uygulamanın bir kaç tane dll dosyasına ihtiyacı vardı. Benimde sadece tek bir exe ile uygulamayı çalıştırabiliyor olmam gerekiyordu. Normal olarak uygulamanın referans dosyaları(dll) uygulama(exe) ile yan yana duracak şekilde derlenir. Eğer dll dosyalarını exe nin içine gömmek istiyorsanız ihtiyacınız olan şey ILMerge aracı.
Bu toolu şu linkten indirebilirsiniz. Kurulum işleminden sonra komut satırı üzerinden aşağıdaki gibi kullanılabilir.
ilmerge /out:Olusacak.exe Program.exe Referans1.dll Referans2.dll
Bu şekilde referans kütüphaneleri uygulamaya gömdük fakat yeni bir referans eklersem komutun sonuna eklemem gerekecektir ve her seferinde bu komutu çalıştırmam gerekecektir. Buna çözüm olarak bazıları bu komutu bir .bat dosyasına yazıp derleme işleminden sonra bat dosyasını çalıştırıyor. Pek hoşuma gitmediği için örnek göstermeyeceğim. Bat dosyası da olsa en azından otomatik çalıştırılması gerekiyor.
ilmerge işleminin otomatize edilmesi için MSBuildTask işlevinden faydalanıp aşağıdaki xml kodunu proje dosyama ekledim.
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Target Name="AfterBuild">
<CreateItem Include="@(ReferencePath)" Condition="'%(CopyLocal)'=='true' and '%(ReferencePath.IlMerge)'=='true'">
<Output TaskParameter="Include" ItemName="IlmergeAssemblies"/>
</CreateItem>
<Message Text="MERGING: @(IlmergeAssemblies->'%(Filename)')" Importance="High" />
<Exec Command=""$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe" /out:@(MainAssembly) "@(IntermediateAssembly)" @(IlmergeAssemblies->'"%(FullPath)"', ' ')" />
</Target>
<Target Name="_CopyFilesMarkedCopyLocal"/>
</Project>
Bu işlemin ardından projeyi derlediğimde eğer derleme işlemi başarılı ise ilmerge otomatik olarak tetikleniyor ve tüm referanslar ile birlikte tek bir exe dosyası oluşturulmuş oluyor.
Faydalı olması dileğiyle
135e6da6-3d66-4e9c-82da-e8b859545e62|1|5.0