为什么使用Postsharp与异步方法时,编译器优化了参数(Why is the compiler

2019-10-21 10:25发布

我开始使用Web API缓存,我用一个方面[缓存]添加到特定的方法。 一切伟大的工作。 后来我改变了这种方法是异步,但此后编译器开始呕吐以下警告:

方法的参数“区域”“GetTree(System.String,System.String,System.String [])”已经由编译器优化出来,将不提供该方面。 禁用编译器优化访问参数。

在这里,你可以看到我是如何使用Postsharp一个例子:

[Cache]
public async Task<IEnumerable<Node>> GetTree(            
[FromUri] string region,
[FromUri] string language,
[FromUri] string[] networks)
{
 ...
 await ...
}

我需要做什么才能做才能摆脱的警告?

Answer 1:

C#编译器优化中删除从状态机类的参数,如果这些参数没有异步方法内的任何地方使用。 出现这种情况,无论您是否使用PostSharp与否。 PostSharp说明你的警告,以通知删除参数不能方面的内部访问。

它建议升级到PostSharp的最新版本 - 新版本可以通过重新引入缺失的参数重新进入状态机处理这个问题。

如果不能升级,那么解决方法是在项目属性的生成页面禁用“优化代码”的发布版本(它的调试残疾人建立默认情况下)。



文章来源: Why is the compiler optimizing out the parameters when using Postsharp with an async method