有没有人成功地适应/将Json.NET移植到能够在部署到iOS的Unity3d下运行的版本(以及webplayer和android,但这些看起来不那么成问题),以某种方式克服AOT问题?
或者是否计划发布兼容版本的Json.NET?
非常感谢,
马克斯
使用Roslyn/Microsoft.CodeAnalysis,我如何获得ISymbol
第三方类型,即在引用的程序集中定义的类型,它不是解决方案的一部分?在我的特定情况下,我正在寻找JSON.NET的JObject,但实际上同样的问题对于像StringBuilder等BCL的东西是有效的.
我到目前为止唯一的想法是实现一个CSharpSyntaxWalker,它查找所有方法调用,属性访问和构造函数调用,检查它们是否是我感兴趣的类型,如果是,则从中获取符号各自的SyntaxNode.我现在要实现这个,但它看起来非常麻烦.我认为必须有更好的方法,但我的google-fu没有产生任何相关的结果.
也许关于背景:我正在尝试做的是将JObject的用法替换为另一个类的用法.
在 VS2019 中,当我启动 ASP.NET Core 5 应用程序(仅公开 API)时,会弹出该应用程序的控制台窗口。曾经有一些设置来决定是将其作为控制台/独立应用程序运行还是将其托管在 IIS Express 中。我一直更喜欢控制台/独立版本,因为它可以让我实时查看日志。
然而,在 VS2022 中,当我启动同一个项目时,根本没有出现任何窗口,而且有趣的是,我也没有看到 IIS Express 启动。
我怎样才能回到让项目作为控制台应用程序启动?(除了从命令行启动它然后附加调试器。)
我只是注意到,奇怪的是,正在创建一个最小化的控制台窗口,因为我启动了十几个项目(微服务),所以我之前没有注意到它,并且 procexplorer 告诉我可执行文件没有窗口,这增加了混乱。
因此,尽管仍然很奇怪,但问题要小得多 - 为什么这个特定的应用程序不会以非最小化的方式启动?它与所有其他可执行文件的唯一区别是它使用 ASP.NET Core,而其他(所有通过消息队列通信的后台服务)则不使用。
这种情况只发生在 VS2022 中,在 VS2019 中,包括此在内的所有可执行文件都以未最小化的方式启动。
在 v6 之前,如果我想根据另一个服务的可用性来注册一个装饰器(而不是依赖于应用的其他装饰器),我可以这样做:
builder.RegisterType<ApiClientMetricsDecorator>()
.As(new DecoratorService(typeof(IApiClient)))
.OnlyIf(b => b.IsRegistered(new TypedService(typeof(IApiCallMetricsReceiver))));
Run Code Online (Sandbox Code Playgroud)
这不再起作用了。装饰器没有被应用。原因似乎是现在内部使用新的 v6 中间件机制来装饰器。
现有的.RegisterDecorator
重载只允许传入 a Func<IDecoratorContext, bool>
,但IDecoratorContext
不允许我检查服务是否已注册,它仅用于检查装饰器链和目标实例。
不幸的是,我不能通过复制源RegisterDecorator
并根据需要进行调整来创建另一个本地扩展方法,因为事实证明该类型DecoratorMiddleware
是内部的。
那么用 v6 来实现我所需要的方法是什么呢?目前我能想到的唯一方法是始终注册装饰器并进行另一次注册:
builder.RegisterType<NullApiCallMetricsReceiver>()
.As<IApiCallMetricsReceiver>()
.IfNotRegistered(typeof(IApiCallMetricsReceiver));
Run Code Online (Sandbox Code Playgroud)
但这将是一个非常丑陋的解决方法,因为我完全不必要地添加一个不执行任何操作的装饰器。
如果相关,我需要这个的原因是因为装饰器的上述注册驻留在由不同项目使用的程序集中的模块中,并且仅在其中一些项目中,指标是相关的,因此它们注册了提供的类型IApiCallMetricsReceiver
。
我在代码库中多次得到相同的模式。
任何帮助将不胜感激,这目前使我无法升级到 Autofac v6,而且我讨厌不更新像 Autofac 这样的核心库。