作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我需要创建一个自定义应用程序域来解决 .NET 运行时的 default behavior 中的错误。 .我在网上看到的示例代码都没有帮助,因为我不知道将它放在哪里,或者它需要在我的 Main()
方法中替换什么。
最佳答案
可能应该注意的是,创建 AppDomains只是绕过一些可以用常量字符串修复的东西可能是错误的方法。如果您尝试执行与您注意到的链接相同的操作,您可以这样做:
var configFile = Assembly.GetExecutingAssembly().Location + ".config";
if (!File.Exists(configFile))
throw new Exception("do your worst!");
递归入口点 :o)
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");
}
使用非静态辅助入口点和 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);
}
}
关于c# - 如何创建应用程序域并在其中运行我的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2648411/
我是一名优秀的程序员,十分优秀!