我的目標是創建一個可啓動陰影複製應用程序的可執行文件。訣竅是,我希望這個初學者程序沒有外部依賴關係,也不必包含任何有關它必須啓動的程序的知識。C#.dll程序集是否可以包含入口點?
我也希望它是目錄中唯一的可執行文件。換句話說,我希望它「運行」.dll程序集而不是.exe程序集。 (我可以要求每次加載到一個新的AppDomain的.dll文件的名稱是相同的,像Main.dll或類似的東西)。
它看起來像AppDomain.ExecuteAssembly會做我想要的。它表示它將在「.NET Framework標題中指定的入口點」開始執行。「
當我嘗試使用該函數時,出現錯誤「在彙編'DllApp'中找不到入口點」。
起動程序我有,只是想經營組裝:
static void Main()
{
AppDomain domain = AppDomain.CreateDomain("DllApp");
domain.ExecuteAssembly("DllApp.dll");
}
應用程序代碼,在一個.dll文件,使用默認的入口點:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
This page on Main() functions說, 「圖書館和服務不需要Main方法作爲切入點」。它沒有說他們不能有一個默認入口點。
我已經試過公共/私有靜態無效的主要,一個int返回類型的所有各種排列,字串[] args作爲參數,有一個命名空間,沒有命名空間,靜態/非靜態類等
我能夠將我的代碼更改爲從MarshalByRefObject繼承,然後使用CreateInstance創建一個對象,但是似乎它會將啓動器更緊密地耦合到它應該啓動的程序。如果我可以使用ExecuteAssembly,那麼正在啓動的應用程序只需要一個靜態無效Main,而且這非常簡單,很難搞定。
是否有可能使.dll程序集有一個默認入口點,併爲ExecuteAssembly找到它,或者我只是不得不辭去自己走另一條路線?
將.NET程序集(dll)的入口點本身不作爲進程啓動是沒有意義的。 – Zenwalker 2012-03-06 03:48:49