在多appdomain设置中,是否有办法让SetEnvironementVariables和Get ....仅在appdomain中工作,因此每个appdomain可以为同一个变量设置不同的值?
答案 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"从主进程生成的应用程序),但这肯定会给应用程序增加一些复杂性。