Konu ilgimi çekti epeyce.. Dayanamadım bir test yaptım.. Önce bir test executable'ı yapıyoruz.
Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EmbeddedTest
{
class Program
{
static **** Main(string[] args)
{
Console.WriteLine("Bu executable dosyadaki bütün kaynaklar:");
try
{
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
foreach (string isim in assembly.GetManifestResourceNames()) Console.WriteLine(isim + "-->" + new System.IO.StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(isim)).ReadToEnd());
}
catch
{
Console.WriteLine("Kaynakları okurken hata oluştu.");
}
}
}
}
Bu programı şu anda çalıştırdığımızda hiç bir kaynak içermiyor...
Bir de resource embed eden programı yazıyoruz..
Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EmbedTest
{
class Program
{
static **** Main(string[] args)
{
Mono.Cecil.AssemblyDefinition definition = Mono.Cecil.AssemblyFactory.GetAssembly("d:\\test.exe");
System.Text.UTF8Encoding encoder = new UTF8Encoding(false);
definition.MainModule.Resources.Add(new Mono.Cecil.EmbeddedResource("EmbeddedTest.ilkTest", Mono.Cecil.ManifestResourceAttributes.Public, encoder.GetBytes("Kaynak Eklenmiş")));
definition.MainModule.Resources.Add(new Mono.Cecil.EmbeddedResource("EmbeddedTest.ikinciTest", Mono.Cecil.ManifestResourceAttributes.Public, encoder.GetBytes("Bu da ikinci bir kaynak...")));
Mono.Cecil.AssemblyFactory.SaveAssembly(definition, "d:\\test.exe");
}
}
}
Haa bir de söylemeyi unutmuşum.. AssemblyDefinition Mono.Cecil'in bir parçasıdır.. Okursan zaten assembly'leri manipule etmek için çok yararlı güzel bir kütüphane.. Bu tip bir program için Mono.Cecil.dll'i proje sayfasında herhangi bir zip dosyasından indirip reference etmen yeter.
Tek sorun, normalde visual studio resource embed ederken aslında bir resource reader embed ediyor o her ne halt ise.. Önemsemedim, okumadım. Ama kendimiz text'in kendisini embed edip, kendisini okuyunca hiç bir sorun çıkmıyor.