Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:在程序集中循环通过appdomains_C# - Fatal编程技术网

C#:在程序集中循环通过appdomains

C#:在程序集中循环通过appdomains,c#,C#,如何循环程序集中的appdomains?假设您的意思是“在过程中”。。。AppDomain是一个非常重要的项目,您应该真正知道何时创建它,并跟踪/管理它的生命周期。要找到进程中的所有AppDomains不是一个简单的方法,好吧。假设您的意思是“在进程中”。。。AppDomain是一个非常重要的项目,您应该真正知道何时创建它,并跟踪/管理它的生命周期。要找到过程中的所有AppDomainAFAIK,没有一种简单的方法。来源: 您需要添加以下内容作为COM引用-~\WINDOWS\Microsoft

如何循环程序集中的appdomains?

假设您的意思是“在过程中”。。。
AppDomain
是一个非常重要的项目,您应该真正知道何时创建它,并跟踪/管理它的生命周期。要找到进程中的所有
AppDomain
s不是一个简单的方法,好吧。

假设您的意思是“在进程中”。。。
AppDomain
是一个非常重要的项目,您应该真正知道何时创建它,并跟踪/管理它的生命周期。要找到过程中的所有
AppDomain
AFAIK,没有一种简单的方法。

来源:

您需要添加以下内容作为COM引用-~\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscor ee.tlb。这适用于currnet执行程序集。如果您想在进程之间循环,然后获取appdomain,那么这可能是不可能的

 public void GetAllAppDomains()
             {

                 AppDomain one = AppDomain.CreateDomain("One");
                 AppDomain two = AppDomain.CreateDomain("Two"); 
                // Creates 2 app domains           

                 List<AppDomain> appDomains = new List<AppDomain>();

                 IntPtr enumHandle = IntPtr.Zero;

                 CorRuntimeHostClass host = new CorRuntimeHostClass();          

                 try
                 {

                     host.EnumDomains(out enumHandle);

                     object domain = null;

                     AppDomain tempDomain;

                     while (true)
                     {

                         host.NextDomain(enumHandle, out domain);

                         if (domain == null)
                         {
                             break;
                         }

                         tempDomain = domain as AppDomain;

                         appDomains.Add(tempDomain);

                     }               

                 }

                 catch (Exception ex)
                 {
                     Console.WriteLine(ex.ToString());          
                 }

                 finally
                 {
                     host.CloseEnum(enumHandle);
                     int rel= Marshal.ReleaseComObject(host);
                 }

                 Assembly[] assemblies;
                 foreach (AppDomain app in appDomains)
                 {
                     Console.WriteLine(app.FriendlyName);

                     assemblies = app.GetAssemblies();

                     Console.WriteLine("-----------------------Assemblies------------------");
                     foreach (Assembly assem in assemblies)
                     {
                         Console.WriteLine(assem.FullName);
                     }
                     Console.WriteLine("---------------------------------------------------");
                 }

             }
public void GetAllAppDomains()
{
AppDomain one=AppDomain.CreateDomain(“一”);
AppDomain二=AppDomain.CreateDomain(“二”);
//创建2个应用程序域
List appDomains=新列表();
IntPtr enumHandle=IntPtr.Zero;
CorRuntimeHostClass主机=新CorRuntimeHostClass();
尝试
{
host.EnumDomains(out-enumHandle);
对象域=空;
AppDomain-tempDomain;
while(true)
{
host.NextDomain(enumHandle,out-domain);
如果(域==null)
{
打破
}
tempDomain=作为AppDomain的域;
appDomains.Add(tempDomain);
}               
}
捕获(例外情况除外)
{
Console.WriteLine(例如ToString());
}
最后
{
host.CloseEnum(enumHandle);
int rel=Marshal.ReleaseComObject(主机);
}
装配[]装配;
foreach(appDomains中的AppDomain应用程序)
{
Console.WriteLine(app.FriendlyName);
assemblies=app.GetAssemblies();
Console.WriteLine(“------------------------------------程序集----------------”);
foreach(部件中的部件组装)
{
Console.WriteLine(组件全名);
}
Console.WriteLine(“-------------------------------------------------------------”;
}
}
来源:

您需要添加以下内容作为COM引用-~\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscor ee.tlb。这适用于currnet执行程序集。如果您想在进程之间循环,然后获取appdomain,那么这可能是不可能的

 public void GetAllAppDomains()
             {

                 AppDomain one = AppDomain.CreateDomain("One");
                 AppDomain two = AppDomain.CreateDomain("Two"); 
                // Creates 2 app domains           

                 List<AppDomain> appDomains = new List<AppDomain>();

                 IntPtr enumHandle = IntPtr.Zero;

                 CorRuntimeHostClass host = new CorRuntimeHostClass();          

                 try
                 {

                     host.EnumDomains(out enumHandle);

                     object domain = null;

                     AppDomain tempDomain;

                     while (true)
                     {

                         host.NextDomain(enumHandle, out domain);

                         if (domain == null)
                         {
                             break;
                         }

                         tempDomain = domain as AppDomain;

                         appDomains.Add(tempDomain);

                     }               

                 }

                 catch (Exception ex)
                 {
                     Console.WriteLine(ex.ToString());          
                 }

                 finally
                 {
                     host.CloseEnum(enumHandle);
                     int rel= Marshal.ReleaseComObject(host);
                 }

                 Assembly[] assemblies;
                 foreach (AppDomain app in appDomains)
                 {
                     Console.WriteLine(app.FriendlyName);

                     assemblies = app.GetAssemblies();

                     Console.WriteLine("-----------------------Assemblies------------------");
                     foreach (Assembly assem in assemblies)
                     {
                         Console.WriteLine(assem.FullName);
                     }
                     Console.WriteLine("---------------------------------------------------");
                 }

             }
public void GetAllAppDomains()
{
AppDomain one=AppDomain.CreateDomain(“一”);
AppDomain二=AppDomain.CreateDomain(“二”);
//创建2个应用程序域
List appDomains=新列表();
IntPtr enumHandle=IntPtr.Zero;
CorRuntimeHostClass主机=新CorRuntimeHostClass();
尝试
{
host.EnumDomains(out-enumHandle);
对象域=空;
AppDomain-tempDomain;
while(true)
{
host.NextDomain(enumHandle,out-domain);
如果(域==null)
{
打破
}
tempDomain=作为AppDomain的域;
appDomains.Add(tempDomain);
}               
}
捕获(例外情况除外)
{
Console.WriteLine(例如ToString());
}
最后
{
host.CloseEnum(enumHandle);
int rel=Marshal.ReleaseComObject(主机);
}
装配[]装配;
foreach(appDomains中的AppDomain应用程序)
{
Console.WriteLine(app.FriendlyName);
assemblies=app.GetAssemblies();
Console.WriteLine(“------------------------------------程序集----------------”);
foreach(部件中的部件组装)
{
Console.WriteLine(组件全名);
}
Console.WriteLine(“-------------------------------------------------------------”;
}
}

这里的问题是什么?您想知道一个进程中运行了多少个应用程序域吗?要求是什么?试试这个:这里的问题是什么?您想知道一个进程中运行了多少个应用程序域吗?要求是什么?试试这个:+1,因为我甚至不认为这是可能的。+1,因为我甚至不认为这是可能的。