- Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathAssemblyResolver.cs
More file actions
Latest commit
87 lines (74 loc) · 2.32 KB
/
Copy pathAssemblyResolver.cs
File metadata and controls
87 lines (74 loc) · 2.32 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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#if !NETSTANDARD1_3
usingSystem;
usingSystem.IO;
usingSystem.Reflection;
usingSystem.Runtime.CompilerServices;
usingSystem.Runtime.InteropServices;
usingJavaScriptEngineSwitcher.Core.Helpers;
usingJavaScriptEngineSwitcher.Core.Utilities;
usingJavaScriptEngineSwitcher.ChakraCore.Resources;
namespaceJavaScriptEngineSwitcher.ChakraCore
{
/// <summary>
/// Assembly resolver
/// </summary>
internalstaticclassAssemblyResolver
{
/// <summary>
/// Name of the ChakraCore assembly
/// </summary>
privateconststringASSEMBLY_NAME="ChakraCore";
[DllImport("kernel32.dll",SetLastError=true)]
privatestaticexternboolSetDllDirectory(stringlpPathName);
/// <summary>
/// Initialize a assembly resolver
/// </summary>
publicstaticvoidInitialize()
{
AppDomaincurrentDomain=AppDomain.CurrentDomain;
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;
}
stringplatform;
if(IsArmProcessorArchitecture())
{
platform="arm";
}
else
{
platform=Utils.Is64BitProcess()?"x64":"x86";
}
stringassemblyFileName=ASSEMBLY_NAME+".dll";
stringassemblyDirectoryPath=Path.Combine(baseDirectoryPath,platform);
stringassemblyFilePath=Path.Combine(assemblyDirectoryPath,assemblyFileName);
boolassemblyFileExists=File.Exists(assemblyFilePath);
if(!assemblyFileExists)
{
return;
}
if(!SetDllDirectory(assemblyDirectoryPath))
{
thrownewInvalidOperationException(
string.Format(Strings.Engines_AddingDirectoryToDllSearchPathFailed,assemblyDirectoryPath));
}
}
/// <summary>
/// Determines whether the current processor architecture is a ARM
/// </summary>
/// <returns>true if the processor architecture is ARM; otherwise, false</returns>
[MethodImpl((MethodImplOptions)256/* AggressiveInlining */)]
privatestaticboolIsArmProcessorArchitecture()
{
PortableExecutableKindspeKind;
ImageFileMachinemachine;
typeof(object).Module.GetPEKind(outpeKind,outmachine);
boolisArm=(int)machine==452/* ImageFileMachine.ARM */;
returnisArm;
}
}
}
#endif