Ошибка "Could not find a part of the path ... bin\roslyn\csc.exe" в ASP.NET проекте
Причина ошибки
Ошибка возникает из-за того, что пакет Microsoft.CodeDom.Providers.DotNetCompilerPlatform требует наличия компилятора Roslyn (csc.exe) в папке bin\roslyn вашего проекта. Этот пакет используется для компиляции представлений Razor на лету (runtime compilation). Если файлы компилятора отсутствуют или не скопировались при сборке, вы получаете указанную ошибку.
Решение: очистка и переустановка пакета Roslyn
Самый надёжный способ — удалить и заново установить пакет Microsoft.CodeDom.Providers.DotNetCompilerPlatform, а также его зависимость Microsoft.Net.Compilers.
- Откройте консоль диспетчера пакетов (Tools -> NuGet Package Manager -> Package Manager Console).
- Выполните команду для удаления пакета:
Uninstall-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -RemoveDependencies - Затем установите пакет заново:
Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform - После установки пересоберите проект (Build -> Rebuild Solution).
После этого папка bin\roslyn должна появиться с файлом csc.exe внутри. Если этого не произошло, проверьте, что в файле Web.config есть следующая секция:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
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"
warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008;40000" />
</compilers>
</system.codedom>
Альтернативный способ: ручное копирование файлов
Если переустановка не помогла, можно вручную скопировать файлы Roslyn из папки packages вашего решения. Найдите папку:
[Ваше_решение]\packages\Microsoft.Net.Compilers.[версия]\tools
Скопируйте оттуда папку roslyn (со всеми файлами, включая csc.exe) в bin\roslyn вашего проекта. Затем пересоберите решение.
Что делать, если ошибка остаётся?
- Убедитесь, что у вас установлена последняя версия пакета (на момент написания — 2.0.1 или новее).
- Проверьте, не заблокирован ли файл csc.exe антивирусом (добавьте папку проекта в исключения).
- Временно отключите "Enable 64-bit processes for Web Projects" в настройках Visual Studio (Tools -> Options -> Projects and Solutions -> Web Projects).
После выполнения этих шагов ошибка должна исчезнуть, и ваше приложение снова будет работать корректно.
<<Альтернативное решение: отключение runtime компиляции Razor
Если вам не нужна компиляция представлений Razor во время выполнения (например, вы публикуете предварительно скомпилированное приложение), вы можете полностью удалить пакет Microsoft.CodeDom.Providers.DotNetCompilerPlatform. Это избавит от необходимости иметь csc.exe в папке bin.
Шаги:
- Удалите пакет через NuGet Package Manager:
Uninstall-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -RemoveDependencies - Удалите из
Web.configсекцию<system.codedom>(если она осталась). - Пересоберите проект.
Обратите внимание: при таком подходе все изменения в представлениях Razor (cshtml) потребуют полной пересборки проекта, а не просто обновления страницы в браузере. Это подходит для продакшн-среды или когда вы используете предварительную компиляцию.
Если вы всё же хотите оставить runtime компиляцию, но избежать ошибки, попробуйте обновить пакет Microsoft.Net.Compilers до версии 3.6.0 или новее — в новых версиях исправлены проблемы с копированием файлов.
Ответов пока нет.
Войдите чтобы оставить ответ