当使用Postsharp和异步方法时,为什么编译器会优化参数

时间:2014-12-15 12:09:23

标签: c#-4.0 asp.net-web-api postsharp

我开始使用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 ...
}

为了摆脱警告,我需要做些什么?

1 个答案:

答案 0 :(得分:1)

如果在async方法中的任何地方都没有使用这些参数,则C#编译器优化会从状态机类中删除参数。无论您是否使用PostSharp,都会发生这种情况。 PostSharp向您显示警告,通知无法在方面内访问已删除的参数。

建议升级到PostSharp的最新版本 - 较新的版本可以通过将缺少的参数重新引入状态机来处理此问题。

如果无法升级,则解决方法是在发布版本的项目属性的构建页面中禁用“优化代码”(默认情况下,它对调试版本禁用)。