5 using System.Reflection;
6 using System.Runtime.InteropServices;
9 using SiliconStudio.Assets;
18 private static object computedParadoxSdkDirLock =
new object();
19 private static string computedParadoxSdkDir = null;
24 AppDomain.CurrentDomain.AssemblyResolve += domain_AssemblyResolve;
29 var assembly = Assembly.Load(
"SiliconStudio.Paradox.VisualStudio.Commands");
30 remote = (
IParadoxCommands)assembly.CreateInstance(
"SiliconStudio.Paradox.VisualStudio.Commands.ParadoxCommands");
33 public static string ParadoxSdkDir
37 lock (computedParadoxSdkDirLock)
39 if (computedParadoxSdkDir == null)
40 computedParadoxSdkDir = FindParadoxSdkDir();
42 return computedParadoxSdkDir;
49 return AppDomain.CreateDomain(
"paradox-domain");
54 bool createDomain = domain == null;
56 domain = CreateAppDomain();
65 AppDomain.Unload(domain);
70 static Assembly LoadAssembly(
string assemblyFile,
bool shadowMemoryCopy)
75 var pdbFile = Path.ChangeExtension(assemblyFile,
"pdb");
76 if (
File.Exists(pdbFile))
77 return Assembly.Load(
File.ReadAllBytes(assemblyFile), File.ReadAllBytes(pdbFile));
80 return Assembly.Load(File.ReadAllBytes(assemblyFile));
84 return Assembly.Load(assemblyFile);
87 static Assembly domain_AssemblyResolve(
object sender, ResolveEventArgs args)
89 if (args.Name == Assembly.GetExecutingAssembly().FullName)
90 return Assembly.GetExecutingAssembly();
92 var paradoxSdkDir = ParadoxSdkDir;
93 if (paradoxSdkDir == null)
96 var paradoxSdkBinDir = Path.Combine(paradoxSdkDir,
@"Bin\Windows-Direct3D11");
99 var assemblyName =
new AssemblyName(args.Name);
100 var assemblyFile = Path.Combine(paradoxSdkBinDir, assemblyName.Name +
".dll");
101 if (
File.Exists(assemblyFile))
102 return LoadAssembly(assemblyFile,
true);
104 assemblyFile = Path.Combine(paradoxSdkBinDir, assemblyName.Name +
".exe");
105 if (
File.Exists(assemblyFile))
106 return LoadAssembly(assemblyFile,
true);
113 remote.StartRemoteBuildLogServer(buildMonitorCallback, logPipeUrl);
118 return remote.GenerateShaderKeys(inputFileName, inputFileContent);
121 public byte[]
GenerateDataClasses(
string assemblyOutput,
string projectFullName,
string intermediateAssembly)
123 return remote.GenerateDataClasses(assemblyOutput, projectFullName, intermediateAssembly);
130 private static string FindParadoxSdkDir()
133 var paradoxSdkDir = Environment.GetEnvironmentVariable(
"SiliconStudioParadoxDir");
136 if (
File.Exists(Path.Combine(paradoxSdkDir,
"build\\Paradox.sln")))
137 return paradoxSdkDir;
140 if (NugetStore.IsStoreDirectory(paradoxSdkDir))
142 var store =
new NugetStore(paradoxSdkDir) { DefaultPackageId =
"Paradox" };
144 var paradoxPackage = store.GetLatestPackageInstalled(store.DefaultPackageId);
145 if (paradoxPackage == null)
148 var packageDirectory = store.PathResolver.GetPackageDirectory(paradoxPackage);
149 return Path.Combine(paradoxSdkDir, NugetStore.DefaultGamePackagesDirectory, packageDirectory);
static AppDomain CreateAppDomain()
Proxies commands to real IParadoxCommands implementation.
void StartRemoteBuildLogServer(IBuildMonitorCallback buildMonitorCallback, string logPipeUrl)
static ParadoxCommandsProxy CreateProxy(AppDomain domain)
Describes paradox commands accessed by VS Package to current paradox package (so that VSPackage doesn...
byte[] GenerateDataClasses(string assemblyOutput, string projectFullName, string intermediateAssembly)
byte[] GenerateShaderKeys(string inputFileName, string inputFileContent)