簡體   English   中英

從本地 Nuget 包文件以編程方式加載程序集

[英]Programmatically Load Assembly From Local Nuget Package File

在我的本地文件系統上,我有 nuget 包foo.nupkg 它包含程序集foo.dll

如果我手動提取foo.nupkg我可以按如下方式以編程方式加載foo.dll程序集:

AssemblyLoadContext.Default.LoadFromAssemblyPath("c:/path/foo.dll");

如何直接從foo.nupkg加載程序集?

我已經嘗試過的:

  • 當然,我可以以編程方式將.nupkg文件提取到臨時目錄,但我想知道這是否真的需要。
  • 我嘗試使用包NuGet.Core 我提供了一個接受IPackagePackageManager#InstallPackage 但似乎IPackage實例只能從存儲庫(我沒有)中恢復。

nuget 包只是一個 zip 文件,因此您可以簡單地使用 System.IO.Compression.ZipArchive 來讀取它。

您還可以從字節數組加載程序集,因此應該可以使用以下內容(假設 newtonsoft.json 包在工作目錄中):

using var archive = ZipFile.OpenRead("newtonsoft.json.12.0.3.nupkg");
var entry = archive.GetEntry("lib/netstandard2.0/Newtonsoft.Json.dll");

using var target = new MemoryStream();

using var source = entry.Open();
source.CopyTo(target);

var assembly = Assembly.Load(target.ToArray());
var type = assembly.GetType("Newtonsoft.Json.JsonConvert");
Console.WriteLine(type.FullName);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM