Como usar o C # 7 nas páginas antes do código ASPX do aplicativo Web?
(Esse é um tipo de acompanhamento da minha pergunta "Como usar o C # 6 com o tipo de projeto Site?")
Estou tentando usar os recursos do C # 7 com o Visual Studio 2017.
Para isso, atualizei oMicrosoft.Net.Compilers
Pacote NuGet para v2.0.0-rc4 no meu aplicativo ASP.NET WebForms 4.6.2 existente.
Parece funcionar bem de dentro do Visual Studio 2017.
Quando implantado no meu site, tudo o que vejo é uma tela amarela da morte:
Erro do compilador com o código de erro 255.
[Saída detalhada do compilador]
Informações sobre a versão: Versão do Microsoft .NET Framework: 4.0.30319; Versão do ASP.NET: 4.6.1590.0
A fonte completa do compilador é muito longa para ser postada aqui (mais de 30k caracteres),Fiz upload para Pastebin.
Minha pergunta:
Existe alguma chance de usar o compilador Roslyn mais recente em um aplicativo Web ASP.NET WebForms?
Atualização 1:
Claro, eu incluí oMicrosoft.CodeDom.Providers.DotNetCompilerPlatform
Pacote NuGet e entradas web.config,como descrito aqui.
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
Eu até tentei mudar o/langversion:6
parâmetro no XML acima para/langversion:7
sem resultado diferente.
Atualização 2:
Provavelmente, a pergunta e a resposta seriam semelhantes ao uso dos recursos do C # 7 nas visualizações do ASP.NET MVC nos arquivos .cshtml Razor.
Atualização 3:
Eu procurei no Log de eventos e os encontrei (sistema alemão, desculpe):
Anwendung: csc.exe
Frameworkversion: v4.0.30319
Beschreibung: Der Prozess wurde aufgrund einer unbehandelten Ausnahme beendet.
Ausnahmeinformationen: System.IO.FileLoadException
bei Microsoft.CodeAnalysis.CommandLine.BuildClient.GetCommandLineWindows(System.Collections.Generic.IEnumerable'1<System.String>)
bei Microsoft.CodeAnalysis.CommandLine.DesktopBuildClient.Run(System.Collections.Generic.IEnumerable'1<System.String>, System.Collections.Generic.IEnumerable'1<System.String>, Microsoft.CodeAnalysis.CommandLine.RequestLanguage, Microsoft.CodeAnalysis.CommandLine.CompileFunc, Microsoft.CodeAnalysis.IAnalyzerAssemblyLoader)
bei Microsoft.CodeAnalysis.CSharp.CommandLine.Program.Main(System.String[], System.String[])
bei Microsoft.CodeAnalysis.CSharp.CommandLine.Program.Main(System.String[])
e:
Exception information:
Exception type: HttpCompileException
Exception message: Eine externe Komponente hat eine Ausnahme ausgelöst.
bei System.Web.Compilation.AssemblyBuilder.Compile()
bei System.Web.Compilation.BuildProvidersCompiler.PerformBuild()
bei System.Web.Compilation.CodeDirectoryCompiler.GetCodeDirectoryAssembly(VirtualPath virtualDir, CodeDirectoryType dirType, String assemblyName, StringSet excludedSubdirectories, Boolean isDirectoryAllowed)
bei System.Web.Compilation.BuildManager.CompileCodeDirectory(VirtualPath virtualDir, CodeDirectoryType dirType, String assemblyName, StringSet excludedSubdirectories)
bei System.Web.Compilation.BuildManager.CompileResourcesDirectory()
bei System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()
bei System.Web.Compilation.BuildManager.CallAppInitializeMethod()
bei System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)