我可以在C#/ .net中使用每个AppDomain环境变量吗?

时间:2014-11-05 10:49:31

标签: appdomain

在多appdomain设置中,是否有办法让SetEnvironementVariables和Get ....仅在appdomain中工作,因此每个appdomain可以为同一个变量设置不同的值?

1 个答案:

答案 0 :(得分:0)

没有。 :(

这个例子:

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"从主进程生成的应用程序),但这肯定会给应用程序增加一些复杂性。