Tags: , | Categories: Genel Posted by Admin on 3/17/2011 7:17 PM | Comments (2)

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="&quot;$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe&quot; /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ')" />     
  </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

Kahve ısmarlayın

Aşağıdaki kahve simgesine tıklayarak bana paypal üzerinden kahve ısmarlayabilirsiniz. Kahveye olan düşkünlüğü ile bilinen birisi olarak büyük bir zevkle içeceğimden emin olabilirsiniz.


Comments (2) -

Sel&#231;uk
Selçuk on 2/17/2012 2:14 PM Kolay Gelsin.
Dediğiniz gibi dos komutuyla yapmayı başardım. Ama dll dosyaları çok olunca sıkıntı oluyor.
XML Kodunu tam olarak nereye yazdığınızı xml kodunda benim proje ismini vermem gereken yer varmı??
Admin
Admin on 3/26/2012 12:06 AM Aktif projenizi solution explorer'dan sağ tıklayarak unload project dedikten sonra tekrar sağ tıklayarak edit 'projeadı.csproj' a tıklayarak yapabilirsiniz. Ya da projenizin csproj dosyasını sağ tıklayarak not defterinde düzenleyebilirsiniz.

Add comment




biuquote
Loading