¿Cómo usar C # 7 dentro de las páginas de código de aplicación web ASPX antes?
(Esto es una especie de seguimiento de mi pregunta "¿Cómo usar C # 6 con el tipo de proyecto de sitio web?")
Estoy tratando de usar las características de C # 7 con Visual Studio 2017.
Para esto, he actualizado elMicrosoft.Net.Compilers
Paquete NuGet a v2.0.0-rc4 en mi aplicación ASP.NET WebForms 4.6.2 existente.
Parece funcionar bien desde Visual Studio 2017.
Cuando se despliega en mi sitio web, todo lo que veo es una pantalla amarilla de la muerte:
Error del compilador con el código de error 255.
[Salida detallada del compilador]
Información de la versión: Microsoft .NET Framework versión: 4.0.30319; Versión de ASP.NET: 4.6.1590.0
La fuente completa del compilador es demasiado larga para publicarse aquí (más de 30k caracteres),Lo he subido a Pastebin.
Mi pregunta:
¿Hay alguna posibilidad de usar el último compilador de Roslyn dentro de una aplicación web ASP.NET WebForms?
Actualización 1:
Por supuesto, he incluido elMicrosoft.CodeDom.Providers.DotNetCompilerPlatform
Paquete NuGet y entradas web.config,como se describe aquí.
<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>
Incluso he tratado de cambiar el/langversion:6
parámetro en el XML de arriba para/langversion:7
sin resultado diferente
Actualización 2:
Probablemente, la pregunta y la respuesta serían similares para usar las características de C # 7 desde las vistas ASP.NET MVC dentro de los archivos .cshtml Razor.
Actualización 3:
Revisé el registro de eventos y encontré estos (sistema alemán, lo siento):
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[])
y:
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)