情况
在我们的应用程序中,我们有一个WPF客户端 and an ASP.NET Core 服务器,两者都使用.NET 5.
我们将所有 DLL 存储在server和client当用户登录时从服务器下载所有必需的 DLL。最初,client独立于任何第三方库、我们的其他项目等,这允许我们在某些情况下下载client作为 DLL(使用另一个应用程序——我将其称为loader– 专门为此目的而设计),加载client using Assembly.Load(binaryData)
并执行登录方法。
边注: 迄今为止被称为client实际上只是一个简单的应用程序,它对用户进行身份验证并下载实际的 DLLclient它由多个程序集组成,允许我们处理服务器上的数据。不过,为了简单起见,我不会区分它们,因为它们都站在客户端。
最近,我使用基于 OpenID Connect 实现了单点登录NetCoreConsoleClient 示例 https://github.com/IdentityModel/IdentityModel.OidcClient.Samples/tree/main/NetCoreConsoleClient/src/NetCoreConsoleClient from 身份模型 https://github.com/IdentityModel因此,对其他程序集的一些引用已添加到client。现在,为了使 SSO 正常工作,loader必须将这些程序集与client.
问题
目前,client使用一些来自的组件微软.AspNetCore.App共享框架。根据这个问题和答案 https://stackoverflow.com/questions/64478618/what-frameworkreference-include-microsoft-aspnetcore-app-is-actually-do-in由于安装了运行时,它应该可以在我的机器上运行 - 该框架存在于我的机器上:C:\Program Files\dotnet\packs\Microsoft.AspNetCore.App.Ref\5.0.0
。但是,当我尝试使用登录时client通过下载loader我越来越System.IO.FileNotFoundException:'无法加载文件或程序集'Microsoft.AspNetCore.Hosting,Version=5.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60'。该系统找不到指定的文件。'
另外,如果我从上面提到的路径获取 DLL 并尝试加载微软.AspNetCore.Hosting手动组装,使用Assembly.Load(binaryData)
, 我越来越系统.BadImageFormatException:'无法加载文件或程序集'Microsoft.AspNetCore.Hosting,Version=5.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60'。不应加载参考程序集来执行。它们只能在仅反射加载器上下文中加载。 (0x80131058)'
我尝试上网搜索,发现可能是32位/64位架构冲突导致的。我尝试创建一个简单的演示应用程序,尝试在架构之间进行更改,但没有成功。
我还发现了一些关于手动加载程序集时遇到的异常的提及,但它们似乎都与我的具体情况无关。
问题
我使用的是微软.AspNetCore.App共享框架错误?如何正确使用呢?
有没有办法实际使用微软.AspNetCore.Hosting和其他组件微软.AspNetCore.App作为常规 DLL,以便我可以使用加载它们Assembly.Load(binaryData)
?