Как использовать C# 7 в веб-приложении ASPX code-before pages?


(это своего рода продолжение моего вопроса "Как использовать C# 6 с типом проекта веб-сайта?")

Я пытаюсь использовать функции C# 7 в Visual Studio 2017.

Для этого, я обновил Microsoft.Net.Compilers пакет NuGet до V2.0.0-RC4 и в мой существующий ASP.NET форм приложение 4.6.2.

Это, кажется, хорошо работает изнутри Visual Studio 2017.

Когда я разворачиваюсь на своем веб-сайте, все, что я вижу, - это желтый экран смерти:

Ошибка компилятора с кодом ошибки 255.

[подробный вывод компилятора]

Сведения о версии: Microsoft .NET Framework версия: 4.0.30319; ASP.NET версия: 4.6.1590.0

Полный исходный код компилятора слишком длинен, чтобы быть опубликованным здесь (более 30k символов), я загрузил его в Pastebin.

Мой вопрос:

Есть ли шанс использовать последний компилятор Roslyn в рамках ASP.NET веб-формы веб-приложения?

Обновление 1:

Конечно, я включил пакет Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet и web.записи конфигурации, как описано здесь .

<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=&quot;Web&quot; /optionInfer+" />
  </compilers>
</system.codedom>

Я даже пытался изменить параметр /langversion:6 в приведенном выше XML на /langversion:7 без какого-либо другого результата.

Обновление 2:

Вероятно, вопрос и ответ были бы аналогичны для использования функций C# 7 изнутри ASP.NET MVC смотрит внутрь .файлы бритвы cshtml.

Обновление 3:

Я просмотрел журнал событий и нашел эти (немецкая система, извините):

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[])    

И:

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)    
1 4

1 ответ:

Наконец, я решил ее.

С помощью Sysinternals Process Monitor я обнаружил, что csc.exe пытается загрузить файл под названием " csc.exe.config ", которого не было.

Поэтому я скопировал "csc.exe.файл config" от моего местного сайта "папке bin\Рослин" на мой живой сайт "в папке bin\Рослин".

После этого все работает, как и ожидалось.

На всякий случай я также скопировал "csi.exe.config" таким же образом, хотя кажется, что это не так требуется, по крайней мере, в моих тестах.

(причина, по которой конфигурационные файлы изначально отсутствовали, заключается в том, что мои сценарии публикации обычно намеренно игнорируют конфигурационные файлы, чтобы не перезаписывать существующие конфигурации).