我想知道razor用于编译我的cshtml模板的C#版本是哪个。我之所以想知道这个,是因为这个破坏性更改。
我们在foreach语句中使用了一个lambda,在我们的本地开发机器上工作得很好,但在没有安装C# 5的测试环境上产生了一个bug。这个bug非常难以调试(我们甚至复制了所有的测试环境DLL和数据库,仍然无法重现该bug)。
因此,为了防止未来出现开发/测试差异,我想知道是否有一种方法可以指定razor应该使用哪个C#版本来编译cshtml文件。如果我能够检查razor使用的C#版本(通过打印它),那就太好了。
更新:按要求提供更多有关此行为如何发生的详细信息。
我们在razor视图中使用devexpress mvc网格来显示数据。为了以动态方式添加列,我们循环遍历(foreach)列表,使用lambda向datagrid中插入列。下面是一个简化的示例:
@Html.DevExpress().GridView(
settings =>
{
settings.Name = "gvDashboard";
//Some more settings
settings.Columns.Add(column =>
{
column.FieldName = Model.DashboardItems.PropertyName(p => p.Id);
column.Caption = "Id";
//Some more column settings
});
foreach (var extraColumnLoopVar in Model.ExtraColumns)
{
//We added this to solve the problem
var extraColumn = extraColumnLoopVar;
settings.Columns.Add(column =>
{
column.Caption = extraColumn.Name;
//Some more column settings
column.SetDataItemTemplateContent(content =>
{
Html.ViewContext.Writer.Write(extraColumn.MyValue);
});
});
}
});