我正在尝试在Xamarin Forms iOS应用程序中将Serolog与Serilog.Sinks.Xamarin(v 0.1.37)和Serilog.Sinks.Elasticsearch(v 8.0.1)结合使用。
所有nuget都安装在Xamarin Forms项目以及Xamarin iOS项目中。

当我尝试创建Logger时(无论是通过代码还是从配置中),它都无法显示“找不到文件Serilog.Sinks.Elasticsearch”。如果删除Serilog.Sinks.Elasticsearch,则它会抱怨另一个。

我做了一些挖掘,发现接收器dll被复制到'''\ bin \ iPhoneSimulator \ Debug'''

elasticsearch - Serilog接收器(dll文件)未复制到iOS应用中-LMLPHP

但是当它们在模拟器中运行时,它们不存在于应用程序中:

elasticsearch - Serilog接收器(dll文件)未复制到iOS应用中-LMLPHP

知道为什么吗?

最佳答案

如果添加Serilog Sinks并将其配置在配置文件中,然后从该文件创建Serilog配置,然后从Serilog config创建Serilog记录器==>在应用程序中任何地方都没有直接代码引用Sinks dll->它们将从应用程序中删除。
任何在运行时动态加载的.dll都可能发生这种情况。
为防止这种情况,您必须对这些dll中的任何函数或对象进行虚拟调用。这样,有一些应用程序代码会调用它们->它们不会被删除。

关于elasticsearch - Serilog接收器(dll文件)未复制到iOS应用中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60826123/

10-11 16:20