Birden çok derleme tek bir montajda nasıl birleştirilir?


87

Aşağıdaki hizmet yığınının DLL'sini ve bazı Azure DLL'lerini EXE projesine kopyaladığım için hizmet yığınımı EXE projesini (azure uygulaması için başlangıç ​​görevi) kullanarak tüketiyorum.

dll'ler

Bu EXE projesini oluşturduğumda, Azure DLL'leri EXE'imle birlikte paketlenecek, ancak hizmet yığınının DLL dosyası EXE ile paketlenmeyecek çünkü EXE'mi herhangi bir makinede çalıştırmak için tüm hizmet yığınının DLL'ini manuel olarak kopyalamam gerekiyor.

Kullanmak için bu hizmet yığınının dll'sini kullandım

JsonServiceClient client = new JsonServiceClient(servicepath);

Tüm bu DLL'leri EXE'mde toplamak için ne yapmalıyım?

Yanıtlar:


120

Birkaç seçeneğiniz var:

VEYA

  • SmartAssembly (ticari) gibi bazı araçlar kullanın
    , diğer şeyler arasında gömülebilir ve birleştirilebilir (kaynak kodunuzu değiştirmeye gerek yoktur)

VEYA

  • 10 satırdan daha az satırda (ücretsiz ancak minimum kaynak kodu değişikliği)
    tüm gerekli bağımlılıkları "gömülü kaynak" olarak işaretlediğiniz kod - bu şekilde EXE dosyasına dahil edilirler ... AssemblyResolveçalışma zamanında Kaynaklardan okuyan bir işleyici kurmanız gerekir ve gerekli DLL'leri .NET çalışma zamanına döndürür ...

4
Bana Jeffrey Richter'in montajları yerleştirme çözümünü hatırlattığınız için teşekkürler! Bunu gerekli kodu enjekte etmekle birleştiren bir araç için Costura'dan bahseden cevabıma bakın .
CodeFox

29

Aradığınız aracın adı ILMerge'dir . Bu bir komut satırı aracıdır ve şu şekilde kullanılabilir:

ilmerge /target:winexe /out:MyApp.exe 
        MyExe.exe ServiceStack.dll ServiceStack.Interfaces.dll ServiceStack.ServiceInterface.dll  ServiceStack.Text.dll

ILMerge'i VS proje kurulumunuza nasıl dahil edeceğinizi açıklayan bir makale de burada bulunmaktadır.


Merhaba, yürütülebilir dosyaya harici kaynak (dosya / resim) ekleyebilir miyim?
Emdadul Sawon

@EmdadulSawon, belki bunları kitaplıklarınızdan birine kaynak olarak dahil edebilirsiniz?
Alexander

27

Katıştırılmış kaynak olarak başvurulan derlemeler dahil etmek için büyük bir araçtır Costura (a Fody eklenti). Yazar Simon Kropp bunu şu şekilde tanımlıyor:

[...] iki yöntemin bir kombinasyonu:

Sonuç, NuGet'ten yalnızca Costura.Fody'yi getirmeyi gerektiren süper basit bir çözümdür .

Özellikleri:

  • Hata ayıklama sembolleri dahil
  • Gömülü montajların sıkıştırılması
  • Belirli montajları dahil etme / hariç tutma
  • Diğerleri (bkz. Benioku )

9
OMG Costura.Fody doğru cevaptır. Paketi nuget'ten yükledim, projeyi yeniden oluşturdum ve şimdi bağımsız bir EXE'm var!
Eric Labashosky

4
Ne kadar kolay olduğuna inanamıyorum. Sadece nuget'ten paketleri kurun ve işiniz bitti.
iraSenthil

2
Ben de Costura, Fody kullanıyorum. NuGet paketlerini kaynak olarak dahil etmek ve kurmak önemsizdir. Proje alın.
Michael Silver

1
@ user3700562, bu teknik yeni derlemeler yaratmaz, bunun yerine bir veya daha fazla başvurulan derlemeleri mevcut bir montajın içine gömer.
CodeFox

1
Harika çözüm! Bir yıldan beri kullanıyorum ve hiç sorun yaşamadım. Ancak lütfen yalnızca en iyi projeniz tarafından referans verilen derlemeleri içerdiğini unutmayın. Uygulamanız bir üçüncü taraf derlemesine başvuran başka bir projeye referans veriyorsa, bunu en üst düzey projenize eklemeniz gerekir.
Demir


3

WPF bağımlılıklarınız varsa, seçenekleriniz daha sınırlı olabilir ..... ILMerge bunlarla ilgilenmiyor gibi görünüyor. Costura.Fody (yukarıda Codefox tarafından belirtildiği gibi) bizim için mükemmel çalıştı ve başlamak için yaklaşık 5 dakika sürdü ... çok iyi bir deneyim.

Nuget ile yükleyin (Paket Yöneticisi Konsolunda doğru varsayılan projeyi seçerek).

"Yerel Kopyala" = true olarak işaretlenmiş tüm DLL'leri birleştirir ve birleştirilmiş bir .exe (standart çıktının yanında, çoğu artık gerekli değildir) üretir ve bu da sıkıştırılır. Bu daha sonra bağımsız olarak kullanılabilir.

Lisans, gerektiği gibi değiştirebileceğiniz / dağıtabileceğiniz için MIT'dir.

https://github.com/Fody/Costura/


2

Ödeme ServiceStack.Gap olan tek bir platformlar arası içine Şekil belgede; ILMerge ServiceStack çeşitli örnekler proje .exe .

ServiceStack ayrıca aşağıdakileri içeren gömülü uygulamalar oluşturmak için özellikle uygun olan bir dizi başka özellik içerir:

  • Hizmetlerinizin .NET'in HTTP Dinleyicisini kullanarak kendi kendine barındırılmasına izin verir
  • Önceden derlenmiş Razor Görünümlerini destekler
  • Gömülü Kaynakları Destekler
  • Sqlite ve OrmLite'da gömülü bir veritabanını destekler
  • ILMerged tek bir .exe dosyası içinde olabilir

2

.net core 3, proje yapılandırmasında tek dosya yayınlama ve kırpma adı verilen iki yeni seçenek sunar.

Belgelerle ilgili daha fazla bilgiyi burada bulabilirsiniz , proje yapılandırması referans için buraya kopyalanmıştır.

  1. Proje Yapılandırması:
    <PropertyGroup>
      <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
      <PublishSingleFile>true</PublishSingleFile>
    </PropertyGroup>

    <PropertyGroup>
      <PublishTrimmed>true</PublishTrimmed>
    </PropertyGroup>
  1. CLI kullanarak:
    dotnet publish -r win10-x64 -p:PublishSingleFile=true
    dotnet publish -r <rid> -c Release

Uygulamanız için kırpılmış tek bir montaj elde etmek için iki seçeneği bir araya getirmek tamamen desteklenir.


2
Bu size tek meclis vermez. Dosyalarınızı bir zip arşivinde sıkıştırır ve ardından uygulamayı çalıştırmayı denediğinizde bir kullanıcı klasörüne çıkarır.
Jesper
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.