Możliwe rozwiązania zaczerpnięte z komentarzy na blogu ScottGu (wyszukaj „8026” na stronie):
Propozycja rozwiązania 1 (David Taylor)
Dodaj te elementy RTM code dom do web.config:
<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>
Następnie dodaj pliki Roslyn i Microsoft.CodeDom.Providers. *. Dll do swojego katalogu BIN.
Jest to dość łatwe do skonfigurowania, ale było dla mnie dziwne, że domyślny szablon nie został skonfigurowany dla niego, jeśli wybrano .NET 4.6 podczas tworzenia nowej „witryny sieci Web” w VS 2015 RTM.
Propozycja rozwiązania 2 (Martin)
W nawiązaniu do powyższego komentarza Davida Taylora, wygląda na to, że ustawienia system.codedom są poprawne, gdy tworzona jest aplikacja internetowa z TargetFramework jako domyślną wersją 4.5.2. Zmiana TargetFramework na v4.6 wydaje się modyfikować ustawienia kompilatora dla CSharp w sposób, który powoduje problem.
Moje obejścia były następujące:
- Plik / Nowy / Aplikacja sieciowa ASP.NET
- Wybierz szablon „Web API” z szablonów ASP.NET 4.5.2
- Zrób kopię elementu system.codedom (i jego zawartości) w web.config
- Używając Properties / TargetFramework, ustaw platformę docelową na 4,6
- Zastąp zmodyfikowany element system.codedom w web.config kopią wykonaną przed zmianą TargetFramework
- Trafienie F5
Strona główna powinna załadować się zgodnie z oczekiwaniami.
Dla informacji, zawartość system.codedom natychmiast po zmianie TargetFramework na v4.6. wyglądało następująco (zwróć uwagę na użycie typu „Microsoft.CSharp.CSharpCodeProvider”):
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
<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>