rdv*_*ren 6 c# tuples razor roslyn c#-7.0
有一段时间我们在剃刀文件中使用了一些新的c#7.0功能.我们已将Roslyn编译器集成到我们的Web项目中,这些项目目前正在针对.NET Framework 4.6.2.
今天我想在剃刀文件中试用元组,如下所示:
@functions
{
public (string labelName, string sfName) GetNames(PurchaseType purchaseType)
{
switch (purchaseType)
{
case PurchaseType.New:
return (labelName: Booklist.New, sfName: SpecflowIdentifiers.BooklistItem.CheckBoxNew);
case PurchaseType.Rental:
return (labelName: Booklist.Rent, sfName: SpecflowIdentifiers.BooklistItem.CheckBoxRental);
case PurchaseType.SecondHand:
return (labelName: Booklist.Secondhand, sfName: SpecflowIdentifiers.BooklistItem.CheckBoxSecondHand);
default:
throw new ArgumentOutOfRangeException(nameof(purchaseType), @"should not get here");
}
}
}
@helper RenderCheckbox(PurchaseType purchaseType, int index, decimal priceTo)
{
var names = GetNames(purchaseType);
var x = name.labelName;
// render something
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下运行时异常:
CS8137:无法定义使用元组的类或成员,因为无法找到编译器所需类型"System.Runtime.CompilerServices.TupleElementNamesAttribute".你错过了参考吗?
CS8179:未定义或导入预定义类型'System.ValueTuple`2'
这导致我/sf/answers/2857874561/提到我应该将System.ValueTuple包添加到项目中.但我已经添加了这个.
这些是配置中使用的包:
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.8" targetFramework="net462" />
<package id="Microsoft.Net.Compilers" version="2.4.0" targetFramework="net462" developmentDependency="true" />
<package id="System.ValueTuple" version="4.4.0" targetFramework="net462" />
Run Code Online (Sandbox Code Playgroud)
所以,我现在回来使用旧的Tuple<>.我想知道是否有人知道我在忽视什么.
编辑11/16/2017:
所以我改变了public (string labelName, string sfName) GetNames(PurchaseType purchaseType)进入public ValueTuple<string, string> GetNames(PurchaseType purchaseType),这给了我以下异常:
CS0433:类型'ValueTuple'存在于'System.ValueTuple,Version = 4.0.2.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51'和'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'
这导致我'ValueTuple <T1,T2>'存在于'System.ValueTuple ...'和'mscorlib ......'中,给出了实际答案.我已经安装了.NET Framework 4.7,并且由于razor是在运行时编译的,所以它只使用该版本.
亲切的问候,里克
Razor视图由ASP.Net在运行时编译,不会自动从项目继承引用或其他设置.
您需要在以下位置添加System.ValueTupleASP.Net运行时编译Web.config:
<system.web>
<compilation>
<assemblies>
<add assembly="System.ValueTuple" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
958 次 |
| 最近记录: |