我希望能够找出剃须刀使用哪个 C# 版本来编译我的 cshtml 模板。我想要这个的原因是这个突破性的变化。
我们在 foreach 语句中有一个 lambda,它在我们的本地开发机器上运行良好,但在我们的测试环境(没有安装 C# 5)上产生了一个错误。这个错误非常难以调试(我们甚至复制了所有测试环境的 DLL 和数据库,但仍然无法重现该错误)。
因此,为了防止将来出现这种开发/测试差异,我想知道是否有办法指定剃须刀应该用来编译 cshtml 文件的 C# 版本。如果我可以检查 razor 使用的 C# 版本(通过打印它),那就太好了。
更新:根据要求,有关此行为如何发生的更多详细信息。
我们使用 devexpress mvc 网格在我们的 razor 视图中显示数据。为了以动态方式添加列,我们循环(foreach)一个在数据网格中插入列的列表(使用 lambda)。一个简化的例子:
@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);
});
});
}
});