2017-03-09 54 views
4

(這是怎樣的一個後續行動,我的問題「How to use C# 6 with Web Site project type?」的)如何在Web應用程序中使用C#7 ASPX代碼 - 頁面之前?

我試圖用C#7特點與Visual Studio 2017年

對於這一點,我已經更新的Microsoft.Net.Compilers NuGet package to v2.0.0-rc4我現有的ASP.NET WebForms 4.6.2應用程序。

這似乎從Visual Studio中很好地工作2017年

當部署到我的網站,我看到的是死亡的黃屏:

編譯器錯誤,錯誤代碼255

[詳細編譯器輸出]

版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.6.1590.0

完整的編譯器源太長,無法在此張貼(超過30k字符),I've uploaded it to Pastebin

我的問題:

是否有任何機會,以使用ASP.NET WebForms的Web應用程序中最新的羅斯林編譯器?

更新1:

當然,我已經包括了Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet包和web.config中的條目,as described here

<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> 

我甚至試着在上面的XML沒有不同的結果改變/langversion:6參數/langversion:7

更新2:

可能的問題和答案將是使用C#7特點從.cshtml剃刀內的文件ASP.NET MVC的觀點中的相似。

更新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

錯誤代碼255是一個流行的錯誤,[這裏](http://stackoverflow.com/questions/33989211/another-strange-asp-net-error-the-compiler-failed-with-error-code- 255)是一對夫婦的建議 – maccettura

+1

@UweKeim啊,這個更新有一點幫助。 –

+1

如果您想使用C#7功能,您可能需要考慮從WebForms移動到MVC 6。 C#7的好處大於嘗試使用WebForms工作的維護開銷?切換堆棧可能會更好。 –

回答

3

最後,我解決了它。

Sysinternals Process Monitor的幫助下,我發現csc.exe試圖加載一個名爲「csc.exe.config」的文件,該文件不存在。

因此,我將我本地網站的「bin \ roslyn」文件夾中的「csc.exe.config」文件複製到我的實時網站的「bin \ roslyn」文件夾中。

之後,一切都按預期工作。

爲了安全起見,我也以同樣的方式複製了「csi.exe.config」,儘管看起來這不是必需的,至少在我的測試中。

(配置文件最初不存在的原因是我的發佈腳本通常故意忽略配置文件以不覆蓋現有配置)。

相關問題