From b08a78bef5cc4d25337eca8e42d1c8ca71c59ee7 Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Fri, 18 Sep 2020 09:57:36 +0200 Subject: [PATCH] [jnimarshalmethod-gen] Avoid creating AppDomains This is part of making the tool to work on Windows and later also with NET5. The created `AppDomain` was used to isolate processed assembly, so that we can unload it and rewrite with generated changes. That didn't work on Windows even with .NET framework, which has the AppDomains API. In NET5 the creation of AppDomains is not even part of the API. So instead of using the created `AppDomain`'s, we preload the assembly in memory and load it from there. --- tools/jnimarshalmethod-gen/App.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/tools/jnimarshalmethod-gen/App.cs b/tools/jnimarshalmethod-gen/App.cs index e3ad1710f..19545082b 100644 --- a/tools/jnimarshalmethod-gen/App.cs +++ b/tools/jnimarshalmethod-gen/App.cs @@ -39,17 +39,13 @@ class App : MarshalByRefObject public static int Main (string [] args) { - var domain = AppDomain.CreateDomain ("workspace"); - var app = (App)domain.CreateInstanceAndUnwrap (typeof (App).Assembly.FullName, typeof (App).FullName); - + var app = new App (); app.AddMonoPathToResolverSearchDirectories (); var assemblies = app.ProcessArguments (args); app.ProcessAssemblies (assemblies); var filesToDelete = app.FilesToDelete; - AppDomain.Unload (domain); - foreach (var path in filesToDelete) File.Delete (path); @@ -282,8 +278,7 @@ public int Compare (MethodInfo a, MethodInfo b) void CreateMarshalMethodAssembly (string path) { - var assembly = Assembly.LoadFile (Path.GetFullPath (path)); - + var assembly = Assembly.Load (File.ReadAllBytes (Path.GetFullPath (path))); var baseName = Path.GetFileNameWithoutExtension (path); var assemblyName = new AssemblyName (baseName + "-JniMarshalMethods"); var fileName = assemblyName.Name + ".dll";