В настройке multi appdomain есть способ сделать SetEnvironementVariables и Get .... работать только внутри приложения, так что каждый appdomain может иметь разные значения для одной и той же переменной?Могу ли я иметь переменные среды AppDomain в C# /. Net?
2
A
ответ
0
No. :(
В этом примере:
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
var newDomain = AppDomain.CreateDomain("Alternative");
Proxy proxyObj = (Proxy)newDomain.CreateInstanceAndUnwrap(typeof(Proxy).Assembly.GetName().FullName,
typeof(Proxy).FullName);
Environment.SetEnvironmentVariable("HELLO_MSG", "Hello World", EnvironmentVariableTarget.Process);
proxyObj.ShowEnvironmentVariable();
Console.ReadKey();
}
}
class Proxy : MarshalByRefObject
{
public void ShowEnvironmentVariable()
{
var msg = Environment.GetEnvironmentVariable("HELLO_MSG");
Console.WriteLine(String.Format("{0} (from '{1}' AppDomain)", msg, AppDomain.CurrentDomain.FriendlyName));
}
}
}
Выведет:
Hello World (from 'Alternative' AppDomain)
Процесс является наиболее конкретный уровень инкапсуляции для переменных среды, и AppDomain
ы будет по-прежнему «жить внутри» тот же процесс.
Обратите внимание, что это будет (например, Directory.GetCurrentDirectory()
, командные аргументы и т. д.
Одно из возможных решений может создать рабочие процессы (приложения .exe, порожденные из основного процесса), но это, безусловно, добавит некоторые сложность вашего приложения.