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

时间:2019-07-06 19:35:37

标签: c# .net dynamic reflection .net-assembly

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

我需要在运行时动态加载BC,但是我似乎找不到任何有关如何实现此目标的文档。

很多帖子都提到通过Assembly.Load()在所有引用的程序集上调用Assembly.GetExecutingAssembly().GetReferencedAssemblies(),但这仅检索具有某些类型的程序集,这些程序集的类型在执行程序集的代码中明确引用了 strong>

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

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

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

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

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,希望那是您想要的。

您可以创建一个窗口应用程序来为您执行此操作。 将此包添加到您的项目中:

Install-Package NuGet.Core -Version 2.14.0

之后:

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);
}

单击按钮后,软件包已下载。

enter image description here