public void TestExecutableLocation()
{
string desiredExecutableFileName = Path.Combine(Environment.CurrentDirectory, "MyDomain.exe");
var setupInfo = new ProcessDomainSetup
{
ExecutableDirectory = Environment.CurrentDirectory
};
// default uses temp directory
using (var domain1 = ProcessDomain.CreateDomain("MyDomain"))
{
var obj = (RemoteTestObject)domain1.CreateInstanceAndUnwrap(TestObjectAssemblyName, TestObjectTypeName);
Assert.That(obj.GetProcessFileName(), Is.Not.EqualTo(desiredExecutableFileName));
}
// now using our specified location
using (var domain2 = ProcessDomain.CreateDomain("MyDomain", setupInfo))
{
var obj = (RemoteTestObject)domain2.CreateInstanceAndUnwrap(TestObjectAssemblyName, TestObjectTypeName);
Assert.That(obj.GetProcessFileName(), Is.EqualTo(desiredExecutableFileName));
}
// test if file exists, it will be overwritten
using (var writer = new StreamWriter(desiredExecutableFileName, false))
{
writer.WriteLine("Garbage");
// will fail to compile because file is open
Assert.Throws<AssemblyGeneratorCompilerException>(() => ProcessDomain.CreateDomain("MyDomain", setupInfo));
writer.Flush();
}
// file is now closed, but contains garbage that can't execute,
// but the file will get overwritten
using (var domain3 = ProcessDomain.CreateDomain("MyDomain", setupInfo))
{
var obj = (RemoteTestObject)domain3.CreateInstanceAndUnwrap(TestObjectAssemblyName, TestObjectTypeName);
Assert.That(obj.GetProcessFileName(), Is.EqualTo(desiredExecutableFileName));
}
// and once we're done, file is gone
Assert.That(!File.Exists(desiredExecutableFileName));
}