C#Dotnet Core 3.1-在运行时加载程序集



我目前正试图在Runtime上加载程序集。

我正在使用AssemblyLoadContext.Default.LoadFromAssemblyPath(path)。然后,使用DependencyContextCompositeCompilationAssemblyResolver,我使用-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);

最新更新