C# plugins share AppDomain?
-
TLDR: I have 2 independent C# plugins that appear to share the same .Net AppDomain when running in NPP.
Does anyone know the side-effects of this?
Is it something I should investigate further?I wrote a C# plugin and had to jump through some hoops so .Net could find a required 2nd dll…
I hooked into AppDomain.CurrentDomain.AssemblyResolve event so I could give the exact path via System.Reflection.Assembly.LoadFrom().
This works well enough, but I just discovered that a new C# plugin I am writing is being trapped by the above event in the first plugin.
I can re-work the first plugin and avoid the AppDomain.CurrentDomain.AssemblyResolve event, but I am wondering if there is something I could do to prevent my plugin affecting other .Net plugins (and vice-versa).
Any thoughts?
-
-
Hello,@moon6969
Follow this information,To C# plugins share AppDomain?
1.Check if the assembly is already loaded
2.If its not loaded, read the assembly into a byte array. This will prevent locking the file.
3.Supply the byte array as an arguement to Assembly.LoadAssembly assembly = null; foreach(Assembly loadedAssembly in AppDomain.CurrentDomain.GetAssemblies()) if (loadedAssembly.FullName == "foobar, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") assembly = loadedAssembly; if(assembly == null) { byte[] studybin = System.IO.File.ReadAllBytes(@"C:\pathToAssembly\foobar.dll"); assembly = Assembly.Load(studybin); }
Note :
If you are trying to find a specific assembly in a directory, you can run ‘System.Reflection.AssemblyName.GetAssemblyName(path);’ to see if the FullName matches what you are looking for. ‘GetAssemblyName(path)’ does NOT inject the assembly into your current AppDomain.I hope this information will be usefull.
Thank you. -
Thanks both.
I’ve not much idea myself about AppDomains, but I am swatting up. I’m also learning about Managed Extensibility Framework (MEF) and Managed AddIn Framework (MAF) to see if they can help.
@Makwana-Prahlad
Thanks for the example - easier for me than theory sometimes!