我正在使用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指令或汇编引用?)
我尝试添加DEMO和DEMO_EXPERIMENTAL构建标志但仍然失败.
什么是错的?
编辑1:
此代码有效,统计数据解析得很好.我可能遇到了一个bug.
public async Task<HttpResponseMessage> GetInfoAsync()
{
// …Run Code Online (Sandbox Code Playgroud) 我在解决方案中有几个项目,C#7的功能,如元组和throw表达式,在所有库项目中都能正常工作,但是有一个(非核心)Web项目由于错误而无法编译C#7功能.在编译之后,错误窗口会快速清除,大概是因为IDE /编辑器编译相同的单元而没有错误.我必须使用输出窗口来查看编译器错误.好像IDE /编辑器假设是C#7,但构建中使用的编译器不是.
我试过__DEMO__,__DEMO_EXPERIMENTAL__在条件编译符号中添加" "无济于事.我已经尝试定位不同版本的框架,并编辑了web.config,包括compilation和targetFramework标签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'".