自托管Web API -引用的控制器不能与“优化代码”一起工作;选择
本文关键字:优化代码 代码 优化 一起 选择 工作 不能 Web API 控制器 引用 | 更新日期: 2023-09-27 17:54:28
我有一个ASP。. NET Web API项目托管在Windows服务中,使用OWIN。我正在使用一个启动类来配置一些东西,并使用IAppBuilder.UseWebApi()选项。在调试器和命令行中,一切都可以完美地工作(我使用命令行参数-e在控制台中运行,或者它可以作为Windows服务运行)。
一切都很好,但是,当我在发布模式下构建时,构建选项启用了"优化代码",我的服务控制器似乎不起作用。
我的控制器在一个单独的类库中,我使用这一行来探测应用程序启动时的控制器,如下所示:自托管WebAPI应用程序引用来自不同程序集的控制器
var controllerType = typeof(MetricsController);
我有一种感觉,优化代码选项导致编译器忽略这一行。有没有人对我该怎么做有什么见解或想法?
谢谢!
在此工作了一会儿之后,我实现了以下方法,优化代码选项似乎很满意。
类级成员:private readonly List<Type> _controllers = new List<Type>();
然后在我的启动。配置方法,我替换了这个:
// Hack: This forces a manual probe of the controller assembly
var controllerType = typeof(MyController);
与这个:// Better Hack: This forces a manual probe of the controller assembly
_controllers.Add(typeof(MyController));
似乎正在发生的事情是优化代码选项剥离了声明但从未使用过的逻辑。在本例中,我使用最初的hack来探测程序集,以便应用程序知道它的存在。由于它的作用域如此紧密,并且从未使用过变量controllerType
,编译器会忽略它。新的方法可能只是一个提示,它可以被使用,编译器保留它。
我尝试了一种基于反射的方法,但无法使其工作。我甚至手动加载了具有控制器的程序集,并且在调试时可以看到它在AppDomain中加载,但由于某种原因它仍然无法工作。我甚至可以验证List是否填充了控制器类型,但奇怪的是运气不好。对于这方面的任何建议,我都非常欢迎,因为我将来会在另一个项目中使用类似的方法。