我目前正试图在Runtime上加载程序集。
我正在使用AssemblyLoadContext.Default.LoadFromAssemblyPath(path)
。然后,使用DependencyContext
和CompositeCompilationAssemblyResolver
,我使用-Compile || Runtime-properties加载未解析的依赖关系。最后,如果还没有找到它们,我会回退到直接从目录路径加载它们。
然而,一些项目仍然缺乏依赖性。像下面的
"找不到引用程序集'Microsoft.AspNetCore.Mvc.Core.dll'包Microsoft.AspNetCore.Mvc.Core"的文件
即使在编译库或运行库中找到它,TryResolveAssemblyPaths
似乎也无法找到它们:/
谢谢你的帮助。
编辑:
嗯,经过一些研究,它似乎比3.1后版本的dotnet核心框架更重要,一些依赖项直接加载在SDK内部。阻止您通过ICompilationAssemblyResolver或其他方式手动加载它们。
所以,若您在某些项目中遇到这个问题,请在调用者/被调用者上应用相同的SDK(或导入它们(例如Microsoft.NET.Sdk.Web。
文件:https://learn.microsoft.com/fr-fr/dotnet/core/project-sdk/overview
以及:https://github.com/dotnet/cli/blob/master/Documentation/specs/runtime-configuration-file.md
编辑2:
我建议您在github上阅读本期:https://github.com/dotnet/runtime/issues/1050
Vitek Karas先生以更准确的方式回答了这个问题。
我所理解的是,你不能从路径加载你的assemply
所以首先得到路径
string path = HttpContext.Current.Server.MapPath("~/bin/dllname.dll");
然后
load =AssemblyLoadContext.Default.LoadFromAssemblyPath(path);