-
Notifications
You must be signed in to change notification settings - Fork 40
Expand file tree
/
Copy pathIsolationDetector.cs
More file actions
69 lines (58 loc) · 1.82 KB
/
Copy pathIsolationDetector.cs
File metadata and controls
69 lines (58 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Collections;
using BitDiffer.Common.Configuration;
using BitDiffer.Common.Utility;
using System.Reflection;
namespace BitDiffer.Core
{
public static class IsolationDetector
{
public static AppDomainIsolationLevel AutoDetectIsolationLevelDirs(params string[] allDirs)
{
List<string> allFiles = new List<string>();
foreach (string dir in allDirs)
{
allFiles.AddRange(Directory.GetFiles(dir, "*.dll"));
allFiles.AddRange(Directory.GetFiles(dir, "*.exe"));
}
return AutoDetectIsolationLevelFiles(allFiles.ToArray());
}
public static AppDomainIsolationLevel AutoDetectIsolationLevelFiles(params string[] allFiles)
{
Hashtable ht = new Hashtable();
Log.Info("Detecting isolation level");
foreach (string file in allFiles)
{
string dir = Path.GetDirectoryName(file);
string assemblyName = GetFullName(file);
string key = dir + "?" + assemblyName;
if (ht.Contains(key))
{
Log.Warn("Setting isolation level to High because the full name {0} was found in at least two assemblies in directory {1}.", assemblyName, dir);
Log.Warn("Consider placing assemblies with identical full names in different directories to improve performance.");
return AppDomainIsolationLevel.High;
}
ht.Add(key, "");
}
return AppDomainIsolationLevel.Medium;
}
private static string GetFullName(string file)
{
try
{
return AssemblyName.GetAssemblyName(file).ToString();
}
catch (BadImageFormatException)
{
return Path.GetFileName(file);
}
catch (Exception ex)
{
throw new ApplicationException(string.Format("Unable to evaulate file: {0}. {1}{1}Make sure the file is a valid .NET assembly", Path.GetFileName(file), Environment.NewLine), ex);
}
}
}
}