मेरा लक्ष्य एक निष्पादन योग्य बनाना है जो एक छाया प्रतिलिपि अनुप्रयोग शुरू करेगा। यह चाल है, मैं चाहता हूं कि इस स्टार्टर प्रोग्राम में कोई बाहरी निर्भरता न हो और उसे शुरू होने वाले कार्यक्रम के बारे में कोई जानकारी न हो।क्या सी #। डीएल असेंबली में प्रवेश बिंदु हो सकता है?
मैं यह भी निर्देशिका में एकमात्र निष्पादन योग्य होना चाहता हूं। दूसरे शब्दों में, मैं चाहता हूं कि यह एक .dll असेंबली ".ex" असेंबली न हो। (मुझे आवश्यकता हो सकती है कि .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 का कहना है कि "पुस्तकालयों और सेवाओं को प्रवेश विधि के रूप में मुख्य विधि की आवश्यकता नहीं है"। यह नहीं कहता कि वे में डिफ़ॉल्ट प्रविष्टि बिंदु भी नहीं हो सकता है।
मैं सार्वजनिक/निजी static void मुख्य, किसी पूर्णांक वापसी प्रकार के सभी विभिन्न क्रमपरिवर्तन की कोशिश की है, स्ट्रिंग [] तर्कों के रूप आर्ग, एक नाम स्थान, कोई नाम स्थान, स्थिर/गैर स्थैतिक कक्षा, आदि
साथमैं मार्शलबीरफॉबजेक्ट से प्राप्त होने के लिए अपना कोड बदल सकता था और उसके बाद ऑब्जेक्ट बनाने के लिए CreateInstance का उपयोग कर सकता था, लेकिन ऐसा लगता है कि यह स्टार्टर को उस कार्यक्रम के लिए अधिक कसकर जोड़ देगा जो इसे शुरू करना है। अगर मैं ExecuteAssembly का उपयोग कर सकता हूं, तो एप्लिकेशन को शुरू करने के लिए केवल स्थिर शून्य मुख्य की आवश्यकता होगी, और यह वास्तव में सरल और गड़बड़ करना मुश्किल है।
क्या एक .dll असेंबली के लिए डिफ़ॉल्ट प्रविष्टि बिंदु होना संभव है, और ExecuteAssembly के लिए इसे ढूंढने के लिए, या क्या मुझे बस एक और मार्ग जाने के लिए इस्तीफा देना है?
यह .NET असेंबली (डीएल) के लिए एक प्रविष्टि बिंदु होने का अर्थ नहीं है क्योंकि स्वयं ही प्रक्रिया के रूप में लॉन्च नहीं किया गया है। – Zenwalker