首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET Tizen和SignalR

.NET Tizen和SignalR
EN

Stack Overflow用户
提问于 2021-06-10 11:11:19
回答 1查看 136关注 0票数 1

我正在构建一个Tizen (.NET Tizen 4.0),它使用.NET Core和Xamarin (https://docs.tizen.org/application/dotnet/)。

一切都很好,除了一件事。不可能启动到集线器的SignalR (Microsoft.AspNetCore.SignalR.Client (5.0.7))连接。一旦我创建了一个新的HubConnectionBuilder,就会引发以下异常:

System.IO.FileLoadException:无法加载文件或程序集'System.Threading.Tasks.Extensions,Version=4.2.0.1,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51‘。所定位的程序集的清单定义与程序集引用不匹配。(HRESULT例外: 0x80131040)

这件事最奇怪的地方。我什么都不做就改变了这个异常。例如,如果我喝了一杯饮料,请返回并再次运行它,缺少一个不同的程序集。现在,我看到System.Threading.Tasks.Extensions, Version=4.2.0.1Microsoft.Extensions.DependencyInjection.Abstractions, Version=5.0.0不见了。最重要的是:我不积极地使用任何一个包。

因此,基本上,一旦我删除了下面的代码行,一切都正常。

代码语言:javascript
复制
this.hub = new HubConnectionBuilder().WithUrl($"wss://{Settings.Instance.ServerAddress}/deviceHub").Build();

我已经尝试添加丢失的软件包,但没有成功。问题是,由于一些非常奇怪的原因,在SignalR.Client包中找不到这些包(只是我的猜测)。我还尝试删除SignalR.Client、重新构建项目、从Visual卸载Tizen、更新所有包,甚至卸载Visual。我在这上面浪费了最后3天,没有任何进展。也许有人有办法解决这个问题,或者某种解决办法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-11 06:24:38

此错误可能是由于Tizen设备上臭名昭著的程序集版本错配问题造成的。

https://developer.samsung.com/tizen/blog/en-us/2020/02/17/assembly-loading-problem-in-tizen-net-applications

说明:Tizen4.0设备附带了预装的System.Threading.Tasks.Extensions.dll程序集4.1.1.0,但是最新的Microsoft.AspNetCore.SignalR.Client nuget包依赖于4.2.1.0System.Threading.Tasks.Extensions.dll。因此,应用程序会中断,因为运行时主机总是首先解析预先安装的程序集。(同一应用程序在Tizen5.5设备上运行时不会出现问题,因为预装的组装版本为4.3.1.0。)但是,我不知道为什么Microsoft.Extensions.DependencyInjection.Abstractions.dll不能被解析,因为它不是.NET核心运行时的一部分,也不是Tizen设备的预装。

简而言之,您可以添加以下事件处理程序,检查应用程序的Main()是否仍然存在问题。

代码语言:javascript
复制
static void Main(string[] args)
{
    AppDomain.CurrentDomain.AssemblyResolve += (object s, ResolveEventArgs eventArgs) =>
    {
        var appDir = Path.GetDirectoryName(typeof(App).Assembly.Location);
        var assemblyName = eventArgs.Name.Split(',')[0];
        var assemblyPath = Path.Combine(appDir, assemblyName + ".dll");
        return File.Exists(assemblyPath) ? Assembly.LoadFile(assemblyPath) : null;
    };
    ..
    app.Run(args);
}

应用此更改时,请确保http://tizen.org/metadata/prefer_dotnet_aot元数据值未在tizen-manifest.xml中设置。如果设置好了,则需要将assemblyPath更改为类似于Path.Combine(appDir, ".native_image", assemblyName + ".ni.dll")的内容。

如果这不能纠正你的错误,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67919966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档