当前位置: 首页 > 知识库问答 >
问题:

Visual Studio 2017 RC上的web项目中无法使用C#7功能

姬烨磊
2023-03-14

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

我尝试在条件编译符号中添加“__DEMO__,__DEMO-EXPERIMENTAL__”,但没有成功。我尝试过针对不同版本的框架,并编辑了网页。config,包括<code>system.web</code>的<code>编译</code>和<code>targetFramework</code>标记。

错误示例:

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

以下是该项目的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')" />

更新:我尝试使用VS 2017 RC中的最新模板创建一个新的web项目,并复制到我的源文件中。同样的事情。

我还尝试将项目|属性|构建|高级|语言版本显式设置为7。导致“/langversion的选项“7”无效”。

共有2个答案

海翔宇
2023-03-14

我来到这里试图回答为什么C#7功能在VS2017中不起作用。我刚刚像答案所说的那样升级了一个现有项目,最后收到了一条关于编译器DLL正在使用和VS需要重新启动的消息。

之后,我可以在IDE fine中键入C# 7代码,但它总是无法编译任何新的功能用法。结果发现。csproj文件本身有新旧编译器的导入,如下所示。这些没有显示在项目的参考列表中。我删除了旧的进口线,准备好了。

<?xml version="1.0" encoding="utf-8"?><Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="packages\Microsoft.Net.Compilers.2.8.2\build\Microsoft.Net.Compilers.props" Condition="Exists('packages\Microsoft.Net.Compilers.2.8.2\build\Microsoft.Net.Compilers.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="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
…
顾文昌
2023-03-14

解决方案是更新Microsoft.Net。编译器nuget包到

 类似资料:
  • 当我试图访问web服务器子域上的laravel应用程序时,我总是遇到500个错误。 我已经将整个laravel项目上传到了一个。文档根指向public\u html/laravel/public。 我已经为引导和存储目录添加了755个权限。 拉威尔版本:5.6。7,我机器上的php版本:7.1。11.Web服务器php 7.0版 什么会导致这个问题?PHP版本之间的差异? .htaccess文件:

  • Visual Studio 2017发布后,我想尝试使用新的C# 7功能创建简单的控制台项目。我希望我只需下载新的Visual Studio 2017,然后创建新的控制台项目,就可以使用新的C# 7功能。但我不能。 如果我安装NuGet包System.ValueTuple,我可以使用一些特性,比如Tuples。 但是对于其他功能,我不知道我需要做什么。比如这个NuGet问题。 我现在需要做所有这些

  • 如何通过 C# 代码输出应用程序正在使用的 C# 版本(无论是 MVC 应用、网站还是控制台应用)。 我花了很长时间搜索这个——我就是在谷歌上找不到任何东西——太奇怪了。 我搜索了:“代码中输出C#版本”“如何获取当前应用的C#版本”等等很多。 这可能吗? 我希望它输出类似“C#版本7”或“5”等内容。

  • 我在eclipse中初始化了一个SpringBoot Rest,并使其成为一个动态Web项目。遵循了三轮胎原则,并在控制器类中声明了endpointURL。项目部署良好,但一旦我尝试访问返回404错误的endpoint。请参阅下面的示例。二手编译器-Maven和服务器-apache tomcat 9.0 主类.java } 示例控制器类

  • 我试图建立一个具有以下依赖关系的应用程序。 这是我在红帽网站上找到的一个例子-http://www.jboss.org/quickstarts/eap/helloworld-jms/ 我正在使用Netbeans 8.0.2。(还在dos和eclipse中使用Maven命令进行了尝试)我在构建时遇到了一个错误,下面是相同的日志: 我可以在以下路径找到文件: https://maven.reposit

  • 我创建了一个NetBeans企业应用程序,它由包装ejb(jar)项目和web(war)项目的ear组成。 我的web项目中有一个servlet,我想在其中使用ejb项目中的一个ejb。