相关疑难解决方法(0)

C#7 ValueTuple编译错误

我正在使用VS2017 RC,我的应用程序以net framework 4.6.1为目标.

我有两个引用System.ValueTuple 4.3的程序集

MyProject.Services MyProject.WebApi

在MyProject.Services中,我有一个类,有这样的方法

public async Task<(int fCount, int cCount, int aCount)> GetAllStatsAsync()
{
    // Some code...
    return (fCount, cCount, aCount);
}
Run Code Online (Sandbox Code Playgroud)

在MyProject.WebApi中,我有一个使用此方法的控制器:

public async Task<HttpResponseMessage> GetInfoAsync()
{
    // Some code...
    var stats = await _myClass.GetAllStatsAsync();

    var vm = new ViewModel
             {
                 FCount = stats.fCount,
                 CCount = stats.cCount,
                 ACount = stats.aCount
             };

     return Request.CreateResponse(HttpStatusCode.OK, vm);
}
Run Code Online (Sandbox Code Playgroud)

Intellisense正在工作并解构元组,但是当我编译它时失败而没有错误列表窗口中的任何错误.在输出窗口中我有这个错误:

2> MyController.cs(83,31,83,40):错误CS1061:'ValueTuple'不包含'fCount'的定义,并且没有扩展方法'fCount'接受类型'ValueTuple'的第一个参数可以找到(你错过了using指令或程序集引用吗?)2> MyController.cs(84,39,84,49):错误CS1061:'ValueTuple'不包含'cCount'的定义,也没有扩展方法'cCount'接受可以找到类型为'ValueTuple'的第一个参数(你是否缺少using指令或汇编引用?)2> MyController.cs(85,35,85,40):错误CS1061:'ValueTuple'不包含定义对于'aCount'并且没有扩展方法'aCount'可以找到接受类型'ValueTuple'的第一个参数(你是否缺少using指令或汇编引用?)

我尝试添加DEMODEMO_EXPERIMENTAL构建标志但仍然失败.

什么是错的?

编辑1:

此代码有效,统计数据解析得很好.我可能遇到了一个bug.

public async Task<HttpResponseMessage> GetInfoAsync()
{
    // …
Run Code Online (Sandbox Code Playgroud)

c# c#-7.0

31
推荐指数
1
解决办法
4693
查看次数

C#7功能在Visual Studio 2017 RC上的Web项目中不起作用

我在解决方案中有几个项目,C#7的功能,如元组和throw表达式,在所有库项目中都能正常工作,但是有一个(非核心)Web项目由于错误而无法编译C#7功能.在编译之后,错误窗口会快速清除,大概是因为IDE /编辑器编译相同的单元而没有错误.我必须使用输出窗口来查看编译器错误.好像IDE /编辑器假设是C#7,但构建中使用的编译器不是.

我试过__DEMO__,__DEMO_EXPERIMENTAL__在条件编译符号中添加" "无济于事.我已经尝试定位不同版本的框架,并编辑了web.config,包括compilationtargetFramework标签system.web.

示例错误:

if (!config.Properties.TryGetValue(modelId, out var model)) // error CS1003: Syntax error, ',' expected
if (modelDescription is ComplexTypeModelDescription complexTypeModelDescription) // error CS1026: ) expected
Run Code Online (Sandbox Code Playgroud)

以下是该项目的csproj文件的前几行:

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
Run Code Online (Sandbox Code Playgroud)

更新:我尝试使用VS 2017 RC中的最新模板创建一个新的Web项目并复制我的源文件.一样.

我也试过明确设置Project | 属性| 建立| 高级| 语言版本为7.结果为"/ langversion"的"无效选项'7'".

asp.net c#-7.0 visual-studio-2017

12
推荐指数
1
解决办法
1525
查看次数

标签 统计

c#-7.0 ×2

asp.net ×1

c# ×1

visual-studio-2017 ×1