gpt4 book ai didi

c# 7 元组不工作(roslyn 编译器异常)

转载 作者:太空狗 更新时间:2023-10-29 21:26:16 24 4
gpt4 key购买 nike

一段时间以来,我们在 razor 文件中使用了一些新的 c# 7.0 功能。我们已将 Roslyn 编译器集成到我们的 Web 项目中,这些项目目前以 .NET Framework 4.6.2 为目标。

今天我想试试 tuples在 Razor 文件中,像这样:

@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
}

这会产生以下运行时异常:

CS8137: Cannot define a class or member that utilizes tuples because the compiler required type 'System.Runtime.CompilerServices.TupleElementNamesAttribute' cannot be found. Are you missing a reference?

CS8179: Predefined type 'System.ValueTuple`2' is not defined or imported

这让我找到了 https://stackoverflow.com/a/40826779/2772845其中提到我应该将 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" />

所以,我又开始使用旧的 Tuple<>马上。我想知道是否有人知道我忽略了什么。

编辑 2017 年 11 月 16 日:

所以我改变了 public (string labelName, string sfName) GetNames(PurchaseType purchaseType)进入public ValueTuple<string, string> GetNames(PurchaseType purchaseType)这给了我以下异常(exception):

CS0433: The type 'ValueTuple' exists in both 'System.ValueTuple, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' and 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'

这让我找到了 'ValueTuple<T1, T2>' exists in both 'System.ValueTuple ...' and 'mscorlib ...'给出实际答案。我已经安装了 .NET Framework 4.7,并且由于 razor 是在运行时编译的,所以它只使用该版本。

亲切的问候,瑞克

最佳答案

Razor View 由 ASP.Net 在运行时编译,不会自动从您的项目继承引用或其他设置。

需要在Web.config中的ASP.Net运行时编译中加入System.ValueTuple:

<system.web>
<compilation>
<assemblies>
<add assembly="System.ValueTuple" />

关于c# 7 元组不工作(roslyn 编译器异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47305552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com