- Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathAssemblyResolver.cs
More file actions
Latest commit
72 lines (62 loc) · 1.86 KB
/
Copy pathAssemblyResolver.cs
File metadata and controls
72 lines (62 loc) · 1.86 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
70
71
72
usingSystem;
usingSystem.IO;
usingSystem.Reflection;
usingJavaScriptEngineSwitcher.V8.Resources;
namespaceJavaScriptEngineSwitcher.V8
{
/// <summary>
/// Assembly resolver
/// </summary>
internalstaticclassAssemblyResolver
{
/// <summary>
/// Name of the ClearScriptV8 assembly
/// </summary>
privateconststringASSEMBLY_NAME="ClearScriptV8";
/// <summary>
/// Initialize a assembly resolver
/// </summary>
publicstaticvoidInitialize()
{
AppDomain.CurrentDomain.AssemblyResolve+=AssemblyResolveHandler;
}
privatestaticAssemblyAssemblyResolveHandler(objectsender,ResolveEventArgsargs)
{
if(args.Name.StartsWith(ASSEMBLY_NAME,StringComparison.OrdinalIgnoreCase))
{
varcurrentDomain=(AppDomain)sender;
stringbaseDirectoryPath=currentDomain.SetupInformation.PrivateBinPath;
if(string.IsNullOrEmpty(baseDirectoryPath))
{
// `PrivateBinPath` property is empty in test scenarios, so
// need to use the `BaseDirectory` property
baseDirectoryPath=currentDomain.BaseDirectory;
}
stringplatformName;
intplatformBitness;
if(Environment.Is64BitProcess)
{
platformName="x64";
platformBitness=64;
}
else
{
platformName="x86";
platformBitness=32;
}
stringassemblyDirectoryPath=Path.Combine(baseDirectoryPath,platformName);
stringassemblyFileName=string.Format("{0}-{1}.dll",ASSEMBLY_NAME,platformBitness);
stringassemblyFilePath=Path.Combine(assemblyDirectoryPath,assemblyFileName);
boolassemblyFileExists=File.Exists(assemblyFilePath);
if(!assemblyFileExists)
{
thrownewFileNotFoundException(
string.Format(Strings.Engines_ClearScriptV8AssemblyFileNotFound,
assemblyFileName,platformName));
}
returnAssembly.LoadFile(assemblyFilePath);
}
returnnull;
}
}
}