gpt4 book ai didi

c# - 从插件加载程序集

转载 作者:太空宇宙 更新时间:2023-11-03 12:01:26 25 4
gpt4 key购买 nike

简介

我正在为 Navisworks 编写一个插件,我正在使用 Dropbox api 从存储库下载/上传文档。

问题

Dropbox.Api 使用 Newtonsoft.Json.dll 版本 7.0,问题是 Navisworks 使用4.0 版本的相同 程序集,所以我不能使用 Dropbox api,因为它每次都会抛出异常:

System.AggregateException: One or more errors occurred. ---> System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=7.0.0.0, ...

据我所知,该程序具有程序集 4.0v,因此 Dropbox.Api 无法正常执行。

到目前为止,我所做的是使用另一个进程,我可以加载正确的程序集并从那里下载/上传文件,但我想避免使用第二个进程。

我试图在运行时使用反射来加载程序集,但是没有效果,程序仍然找不到更新的程序集。

//Load the assembly at the beginning of the plugin
var ass = System.Reflection.Assembly.Load(Properties.Resources.Newtonsoft_Json);

//Use the Dropbox api
//Exception...

我能否以某种方式强制程序使用较新的程序集(临时)?

是否有我遗漏的解决方案?

最佳答案

您遇到此问题是因为您无法加载两个不同的 -strong-named 版本的 .NET 程序集(无论它在文件系统中的什么位置)进入同一个 AppDomain。默认情况下,您从一个名为 Primary AppDomain 的 AppDomain 开始。

强名称程序集是采用文件名的程序集;版本;签署 key 和文化以生成独特的程序集。

By now, what I've done is to use another process which I can load the right assembly and download/upload the files from there, but I would like to avoid using a second process.

无需创建第二个进程,您可以在同一进程中创建一个第二个AppDomain。每个AppDomain都可以加载不同版本的程序集包括Newtonsoft.Json而不冲突。

I'm trying to use reflection to load the assembly at runtime, but it takes no effect, the program still cannot find the newer assembly.

那是行不通的,它本质上与让 .NET 自动为您做这件事是一样的。

唯一可以将多个版本的 .NET 程序集加载到同一个 AppDomain 的情况是程序集(在本例中为 NuGet 包)和依赖程序集都是强名称。出于某种原因,我一直无法理解为什么大多数开源 .NET 开发人员拒绝使用强名称程序集。

关于c# - 从插件加载程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56847962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com