当前位置: 首页 > 编程语言 > C#

在ASP.NET5中动态加载程序集分享

时间:2023-04-11 01:08:02 C#

在ASP.NET5中动态加载程序集我曾经有一些代码扫描我应用程序的bin目录以查找程序集,这些程序集尚未加载到AppDomain并加载它们.它基本上看起来像:foreach(varassemblyPathinDirectory.GetFiles("pathtobin","*.dll")){Assembly.Load(inspected.GetName());为简洁起见,我跳过了try/catch子句等。这允许我在运行时删除bin文件夹中的程序集,以及某些接口的实现,并让IoC容器自动拾取它们。现在有了新的Roslyn魔法,调试时不再需要物理DLL。有没有办法动态检索程序集名称、项目名称或依赖项名称(在project.json中)。我想我必须在Entropy存储库中实现类似这个示例的东西,但我不知道如何为我的场景实现它。您正在寻找的是一个ILibraryManager实现,它提供对应用程序的完整依赖关系图的访问。这已经流经ASP.NET5DI系统。所以,你可以从那里触摸它。可以在RoslynCompilationService中找到示例用法。您可以使用IAssemblyLoadContextAccessor接口动态加载ASP.NET5类库(.xproj)项目。以下示例代码适用于Beta4:publicclassStartup{publicvoidConfigure(IApplicationBuilderapp){varassemblyLoadContextAccessor=app.ApplicationServices.GetService();varloadContext=assemblyLoadContextAccessor.Default;varloadedAssembly=loadContext.Load("NameOfYourLibrary");我使用ILibraryManager建议的ILibraryManager部分解决了这个问题。我稍微更改了方法,因此不需要扫描bin文件夹以查找新程序集。我只想要当前AppDomain中的所有已加载程序集。我在我的类型查找器类中注入了ILibraryManager接口的一个实例,并使用GetReferencingLibraries()方法和应用程序中所有其他程序集引用的核心程序集的名称。可以在此处找到一个示例实现,这是重要的部分:新的程序集名称(信息。名称)));对于.net核心用户,这是我从特定路径加载程序集的代码。我不得不使用指令,因为它与.NetFramework和.NetCore略有不同。在您的类标头中,您需要使用以下内容声明:#ifNET46#elseusingSystem.Runtime.Loader;#endif在你的函数中是这样的:动态加载程序集共享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——stringassemblyPath="c:tempassmebly.dll";#ifNET46程序集程序集=Assembly.LoadFrom(assemblyPath);#elseAssemblyLoadContextcontext=AssemblyLoadContext.Default;程序集assembly=context.LoadFromAssemblyPath(assemblyPath);#endif本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: