2011-07-07 17 views
5

SQLite içeren C# 'da tek çalıştırılabilir bir uygulama oluşturmaya çalışıyorum. System.Data.SQLite bir yönetilmeyen DLL (SQLite.Interop.dll) bağlıdır, bu yüzden ILMerge ile birleştiremiyorum.System.Data.SQLite'i tek bir yürütülebilir programla nasıl birleştirebilirim?

System.Data.SQLite'ı projem içine nasıl ekleyebilirim? Böylece, DLL'lerle birlikte hiçbir tek yürütülebilir uygulama üretebilirim?

+0

gibi bir şey? – Serghei

+0

Yapamazsınız. Dediğin gibi, yönetilmeyen bir dll bağlıdır. Yönetilmeyen dll'ler tek bir yürütülebilir dosyaya birleştirilemez. –

+1

@Serghei Sistem etrafında bir yükleyici spew'in olması, kodunuzu hatasız hale getirmeyi zorlaştırır. Bir yürütülebilir dosya ile kullanıcı değiştirirse en son sürüme sahip olduklarını bilirsiniz. Yükleyicinin tüm doğru DLL'leri içerip içermediğini ve bunların hepsini değiştirip değiştirmediğini düşünerek endişelenmeyin. Ayrıca, benim önemsiz uygulamanızı çalıştırmak için bir sihirbazdan geçmek zorunda kalmamanın daha iyi bir kullanıcı deneyimi olduğunu düşünüyorum. – spiffytech

cevap

4

dll dosyasını yürütülebilir dosyaya gömülü bir kaynak olarak ekleyebilir, sonra da çalışma zamanında ayıklayabilirsiniz (bu, programın dll'yi ayıklamak istediğiniz dizine yazma izninin olduğunu varsayar).

uygulamanız için bir yükleme dosyası yapmazlar neden

string sqllitefile = "sqllite.dll"; 
Assembly currentAssembly = Assembly.GetExecutingAssembly(); 

using (FileStream fs = fileInfoOutputFile.OpenWrite()) 
using (Stream resourceStream =currentAssembly.GetManifestResourceStream(sqllitefile)) 
{ 
    const int size = 4096; 
    byte[] bytes = new byte[4096]; 
    int numBytes; 
    while ((numBytes = resourceStream.Read(bytes, 0, size)) > 0) 
    { 
     fs.Write(bytes, 0, numBytes); 
    } 
    fs.Flush(); 
    fs.Close(); 
    resourceStream.Close(); 
} 
+0

Bir derlemeyi bir bellek akışından yüklemek de mümkündür. Yani diske yazmanız gerekmiyor. – bitbonk

+2

@bitbonk - bu, yönetilmeyen meclise (soru hakkında konuşurken) başvurmak zorunda olan üçüncü taraf bir yönetilen meclisle nasıl çalışır? Bu yönetilen derleme onu bellekten okumak için ayarlanmamışsa, onu kullanamaz. –

+0

Evet, haklısınız, kullanılmamış bir DLL söz konusu olduğunda, bu yaklaşım işe yaramıyor. – bitbonk

İlgili konular