जरूरत की बहुत विस्तृत उदाहरण है कि AppDomains बनाने बस कुछ एक निरंतर तार के साथ ठीक किया जा सकता है कि चारों ओर पाने के लिए शायद यह करने के लिए गलत तरीका है । एक nonstatic माध्यमिक का उपयोग कर ओ)
static void Main(string[] args)
{
if (AppDomain.CurrentDomain.IsDefaultAppDomain())
{
Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
var currentAssembly = Assembly.GetExecutingAssembly();
var otherDomain = AppDomain.CreateDomain("other domain");
var ret = otherDomain.ExecuteAssemblyByName(currentAssembly.FullName, args);
Environment.ExitCode = ret;
return;
}
Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
Console.WriteLine("Hello");
}
त्वरित नमूना: यदि आप लिंक आप उल्लेख किया है एक ही बात करने के लिए कोशिश कर रहे हैं, तो आप सिर्फ ऐसा कर सकता है:
var configFile = Assembly.GetExecutingAssembly().Location + ".config";
if (!File.Exists(configFile))
throw new Exception("do your worst!");
रिकर्सिव प्रवेश बिंदु प्रवेश बिंदु और MarshalByRefObject ...
class Program
{
static AppDomain otherDomain;
static void Main(string[] args)
{
otherDomain = AppDomain.CreateDomain("other domain");
var otherType = typeof(OtherProgram);
var obj = otherDomain.CreateInstanceAndUnwrap(
otherType.Assembly.FullName,
otherType.FullName) as OtherProgram;
args = new[] { "hello", "world" };
Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
obj.Main(args);
}
}
public class OtherProgram : MarshalByRefObject
{
public void Main(string[] args)
{
Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
foreach (var item in args)
Console.WriteLine(item);
}
}
स्रोत
2010-04-15 20:02:11
धन्यवाद। क्या दूसरे के लिए एक दृष्टिकोण पसंद करने का कोई कारण है? –
पहला शायद क्लीनर होगा। यह आपको उस ऑब्जेक्ट को बनाने के बजाय मानक प्रविष्टि बिंदु का उपयोग करने की अनुमति देगा जिसे एपडोमेन में मार्शल करने की आवश्यकता होगी। दूसरा दृष्टिकोण अधिक विशिष्ट है।लेकिन यह आमतौर पर प्लग-इन के लिए उपयोग किया जाता है, न कि ऐप का मुख्य प्रवेश बिंदु। –
'AppDomain' ऑब्जेक्ट पर 'executeAssembly (...)' विधि भी है जिसे आप एक प्रविष्टि बिंदु वाले किसी अन्य असेंबली के पथ प्रदान कर सकते हैं। यह थोड़ा क्लीनर डिज़ाइन की अनुमति दे सकता है, लेकिन कम से कम दो असेंबली की आवश्यकता होगी। रिकर्सन के लिए –