using System.Diagnostics;namespace Mylibrary{ /// <summary> /// This is a shared library that returns the assemblIEs version /// </summary> public class Sharedlib { public string GetProductVersion() { System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); FiLeversionInfo fvi = FiLeversionInfo.GetVersionInfo(assembly.Location); string version = fvi.ProductVersion; return version; } } }
共享库的编译目标是.net标准2.0.对于我的测试,我在本地NuGet服务器上将其作为NuGet包发布.然后,我将NuGet包包含在Core和Framework Applications中.两个应用程序几乎完全相同.这是代码.
class Program{ static voID Main(string[] args) { Console.Writeline("Registering Resolving Handler..."); AppDomain.CurrentDomain.AssemblyResolve += MyHandler; Console.Writeline("Creating shared library..."); SharedlibWrapper sharedlib = new SharedlibWrapper(); Console.Writeline("The version is {0}",sharedlib.Version); Console.Writeline("Press Enter key to continue..."); Console.Readline(); } static string GetSharedAssemblyPath() { string relativePath = @"..\..\..\SharedAssemblIEs\"; return Path.GetFullPath(relativePath); } static Assembly MyHandler(object source,ResolveEventArgs e) { Console.Writeline("Resolving {0}",e.name); if (e.name.Contains("Mylibrary")) { string path = GetSharedAssemblyPath() + @"Mylibrary.dll"; Console.Writeline("Resolving to path {0}",path); return Assembly.Loadfile(path); } return null; }}
此代码添加了一个AssemblyResolve处理程序,以便在应用程序找不到程序集的情况下,处理程序将尝试解析它.在这种情况下,我将两个应用程序都放在位于解决方案根目录下的SharedAssemblIEs文件夹中.
您会注意到我将共享库放在类包装器中.这是我能够使解决方案工作的唯一方法.如果我直接在Main方法中引用了共享库,则应用程序会在注册事件处理程序之前尝试加载程序集.
现在,当我编译应用程序并运行它们时,我得到以下输出.
Registering Resolving Handler…
Creating shared library…
The version is 1.0.10765
Press Enter key to continue…
现在,我们将共享库的新版本放在SharedAssemblIEs文件夹中,并删除随应用程序发布的版本.现在这是输出.
Creating shared library…
Resolving Mylibrary,Version=1.0.10765.0,Culture=neutral,
PublicKeyToken=nullResolving to path C:…\Sharedlibrary\SharedAssemblIEs\Mylibrary.dll
The version is 1.0.10930
Press Enter key to continue…
核心和框架应用程序的结果相同.请注意,我们可以在SharedAssemblIEs文件夹中删除较新版本的程序集,但仍然可以正确加载.这是我正在寻找允许更新共享库的结果.现在我可以将它放在一个位置并更新两个应用程序.但是,如果我只想出于某种原因只更新一个应用程序,我仍然可以将所需的版本放在应用程序的bin文件夹中.这是有效的,因为程序集解析器将首先查看本地bin,如果在那里找不到,则只从共享位置拉出.
你可以在this GitHub project获得所有的源代码.
总结以上是内存溢出为你收集整理的c# – 如何在.NET Core和.NET Framework应用程序之间共享程序集全部内容,希望文章能够帮你解决c# – 如何在.NET Core和.NET Framework应用程序之间共享程序集所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)