Amacım, gölge kopyalanmış bir uygulama başlatan bir yürütülebilir dosya oluşturmaktır. İşin sırrı, bu başlangıç programının harici bir bağımlılığa sahip olmamasını ve başlatması gereken program hakkında bilgi sahibi olmamasını istiyorum.C# .dll derlemesi bir giriş noktası içerebilir mi?
Ayrıca dizindeki tek yürütülebilir dosya olmasını istiyorum. Başka bir deyişle, bir .dll derlemesi bir .exe derleme "çalıştırmak" istiyorum. (Ben, yeni bir AppDomain içine yüklenen .dll dosyasının adı her zaman, Main.dll veya bunun gibi bir şey aynı olması gerekir.)
Tam olarak istediklerimi yapar gibi görünüyordu AppDomain.ExecuteAssembly. ".NET Framework üstbilgisinde belirtilen giriş noktasında" çalışmaya başlayacağını söylüyor.
Bu işlevi kullanmaya çalıştığımda "Giriş noktası," DllApp "grubunda bulunamadı" hatasını alıyorum.
Ben marş programı, sadece montaj çalıştırmaya çalışırken:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
This page on Main() functions söylüyor: varsayılan giriş noktası ile,
static void Main()
{
AppDomain domain = AppDomain.CreateDomain("DllApp");
domain.ExecuteAssembly("DllApp.dll");
}
uygulama kodunu, bir .dll dosyasında "Kütüphaneler ve hizmetler giriş noktası olarak Ana yöntem gerektirmez". 'un'un da varsayılan bir giriş noktasına sahip olmadığını söylemez.
ben kamu/özel void ana, bir int dönüş türünün tüm çeşitli permütasyon denedi, dize [] vb ad, hiçbir ad, statik/statik olmayan sınıf,
ile argümanlar olarak argsKodumu MarshalByRefObject öğesinden devralmak için değiştirdim ve sonra bir nesne oluşturmak için CreateInstance'ı kullanabildim, ancak başlatıcının başlattığı programa daha sıkı bir şekilde bağlanacağı anlaşılıyor. ExecuteAssembly'ı kullanabilseydim, başlatılan uygulama sadece bir statik boş Main'a ihtiyaç duyardı, ve bu gerçekten basit ve dağınıklık için çok zor.
Bir .dll derlemesinin varsayılan bir giriş noktasına sahip olması ve bunu bulmak için ExecuteAssembly için mi yoksa yalnızca başka bir rotaya geçmek için kendimi istifa etmem gerekiyor mu?
Kendisi bir süreç olarak başlatılmadığı için, bir .NET derlemesi (dll) için bir giriş noktası olması mantıklı değildir. – Zenwalker