.NET Core 2.x加载引用的程序集,在代码中没有类型引用

Kob*_*bek 7 .net c# reflection dynamic .net-assembly

我有一个.NET Core 2.2项目A,该项目具有对程序集和.NET的程序包引用。(基本上是NuGet引用的dll)BC

我需要BC在运行时动态加载,但我似乎无法找到我怎么可能做到这一点的任何文档。

很多文章Assembly.Load()都提到了通过调用所有引用的程序集Assembly.GetExecutingAssembly().GetReferencedAssemblies(),但是这只会检索在执行程序集的代码中明确引用了某些类型的程序集。

这对我不起作用,因为在我的代码中我没有引用它们的类型。

我发现可以通过执行a获得完整的引用程序集列表Assembly.ReflectionOnlyLoad()但是.NET Core Runtime不支持此功能

我试图搜索AppDomainAssemblyLoadContext类,以查找此类信息,但找不到任何有用的信息。

综上所述,我的问题是如何动态加载程序集引用的程序集,而无需在代码中显式地触摸它们的某些类型

Sae*_*ini -1

我找到了一个解决方案,我希望这就是你想要的。

您可以制作一个窗口应用程序来为您完成此操作。将此包添加到您的项目中:

Install-Package NuGet.Core -Version 2.14.0
Run Code Online (Sandbox Code Playgroud)

在那之后:

private void button1_Click(object sender, EventArgs e)
{
    string packageID = "Newtonsoft.Json"; // Use your package name
    IPackageRepository repo = PackageRepositoryFactory.Default.CreateRepository("https://packages.nuget.org/api/v2");
    var version = repo.FindPackagesById(packageID).Max(p => p.Version);

    string path = "D:\\MyPackages"; // Use your path
    PackageManager packageManager = new PackageManager(repo, path);
    packageManager.InstallPackage(packageID, SemanticVersion.Parse(version.ToString()), true, false);
}
Run Code Online (Sandbox Code Playgroud)

单击按钮后,包已下载。

在此输入图像描述

  • 编写安装 nuget 包的代码与尝试从代码加载程序集有何关系(实际上阅读 OP 帖子会告诉您他在加载程序集时遇到问题,而不是下载程序集) (2认同)