Я попытался создать домен приложения в функциях Azure для запуска ненадежного кода. Создание домена, кажется, работает нормально, но когда я пытаюсь загрузить сборки, кажется, что они загружаются неправильно.
Сначала я попробовал простой домен приложения:
public class Sandboxer
{
public void Run()
{
AppDomain newDomain = AppDomain.CreateDomain("name");
var obj = newDomain.CreateInstance(typeof(OtherProgram).Assembly.FullName, typeof(OtherProgram).FullName).Unwrap();
}
}
public class OtherProgram : MarshalByRefObject
{
public void Main(string[] args)
{
Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
foreach (var item in args)
Console.WriteLine(item);
}
}
Я получил ошибку
"System.IO.FileNotFoundException: не удалось загрузить файл или сборку" Песочница, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = 2cd9cb1d6fdb50b4 'или одна из ее зависимостей. Системе не удается найти указанный файл. "
Затем я попытался установить appliactionBase в папку с моей DLL в ней.
public class Sandboxer
{
public void Run()
{
var location = typeof(OtherProgram).Assembly.Location;
AppDomainSetup ads = new AppDomainSetup();
ads.ApplicationBase = Path.GetDirectoryName(location);
AppDomain newDomain = AppDomain.CreateDomain("name", null, ads);
var obj = newDomain.CreateInstance(typeof(OtherProgram).Assembly.FullName, typeof(OtherProgram).FullName).Unwrap();
var other = obj as OtherProgram;
var other2 = obj as MarshalByRefObject;
}
}
public class OtherProgram : MarshalByRefObject
{
public void Main(string[] args)
{
Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
foreach (var item in args)
Console.WriteLine(item);
}
}
В этом случае «other» является нулем в конце метода Run (), но «other2» является __TransparentProxy. Кажется, что он находит и загружает dll, но не понимает тип.
Как я могу исправить эту проблему? Спасибо!
Крест размещен здесь: https://social.msdn.microsoft.com/Forums/azure/en-US/59b119d8-1e51-4460-bf86-01b96ed55b12/how-can-i-create-an-appdomain-in-azure-functions?forum=AzureFunctions&prof=required