-
I use two AssemblyLoadContext load class, and one class use other Assembly in other AssemblyLoadContext, but invoke method will throw
code in here using ColoryrServer.SDK;
public class test111
{
public test111()
{
}
public string getString(string data)
{
return data + "test21";
}
} class two using ColoryrServer.SDK;
public class app_test
{
public dynamic Main()
{
test111 a = new test111();
return "true" + a.getString("a");
}
} invoke test public record DllBuildSave
{
public AssemblyLoadContext Assembly { get; set; }
public Type DllType { get; set; }
public Dictionary<string, MethodInfo> MethodInfos { get; set; } = new();
}
var name = "class1.dll";
var name1 = "class1.pdb";
var FileStream = new FileStream(name, FileMode.Open, FileAccess.Read);
var FileStream1 = new FileStream(name1, FileMode.Open, FileAccess.Read);
var AssemblySave = new DllBuildSave
{
Assembly = new AssemblyLoadContext(name, true)
};
AssemblySave.Assembly.LoadFromStream(FileStream, FileStream1);
FileStream.Dispose();
FileStream1.Dispose();
name = "class2.dll";
name1 = "class2.pdb";
FileStream = new FileStream(name, FileMode.Open, FileAccess.Read);
FileStream1 = new FileStream(name1, FileMode.Open, FileAccess.Read);
var AssemblySave1 = new DllBuildSave
{
Assembly = new AssemblyLoadContext(name, true)
};
AssemblySave1.DllType = AssemblySave1.Assembly.Assemblies.First().GetTypes();
var Temp = AssemblySave1.DllType.GetMethods();
foreach (var Item in Temp)
{
if (Item.Name is "GetType" or "ToString"
or "Equals" or "GetHashCode")
continue;
AssemblySave1.MethodInfos.Add(Item.Name, Item);
}
MethodInfo mi = AssemblySave1.MethodInfos["Main"];
dynamic dllres = mi.Invoke(Activator.CreateInstance(AssemblySave1.DllType), null); code build use
if the class one load in |
Beta Was this translation helpful? Give feedback.
Answered by
Coloryr
May 31, 2022
Replies: 1 comment
-
done by myself public class DllBuildSave : AssemblyLoadContext
{
public DllBuildSave(string name)
: base(name, true)
{
}
public Type DllType { get; set; }
public Dictionary<string, MethodInfo> MethodInfos { get; set; } = new();
protected override Assembly Load(AssemblyName name)
{
return DllStonge.FindClass(name);
}
} |
Beta Was this translation helpful? Give feedback.
0 replies
Answer selected by
Coloryr
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
done by myself