Не удалось найти часть пути... bin\roslyn\csc.exe
Я пытаюсь запустить проект Asp.net MVC, полученный из источника управления TFS. Я добавил все ссылки на сборку, и я могу успешно строить и компилировать без каких-либо ошибок или предупреждений.
Но я получаю следующую ошибку в браузере:
Не удалось найти часть пути 'C:\B8akWorkspace\B8akProject\B8akSolution\B8AK.Portal\Bin\Рослин\csc.exe'.
Вот полный скриншот страницы с ошибкой.
![введите описание изображения здесь]()
После нескольких дней исследований я понял, что Roslyn - это платформа .NET-компилятора, которая предлагает расширенные функции компиляции. Однако я не понимаю, почему моя сборка пытается найти \bin\roslyn\csc.exe, потому что я не настроил ничего, связанное с Roslyn, и я не намерен использовать Roslyn в своем проекте.
Ответы
Ответ 1
Проблема с шаблонами VS2015 по умолчанию заключается в том, что компилятор фактически не скопирован в каталог tfr\bin\roslyn \, а скорее из каталога {outdir}\roslyn\directory
Добавьте этот код в файл .csproj:
<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
<ItemGroup>
<RoslynFiles Include="$(CscToolPath)\*" />
</ItemGroup>
<MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>
Ответ 2
В моем случае решение было переустановить/обновить пакеты Nuget:
- Microsoft.Net.Compilers 1.1.1
- Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.1
Затем я посмотрел в .csproj и убедился, что пути к пакетам верны (в моем случае.. \..\packages\*. *) Внутри тегов <ImportProject>
сверху и в <Target>
с именем "EnsureNuGetPackageBuildImports" в дно. Это на MVC 5 и .NET Framework 4.5.2.
Краткий ответ - запустите это в консоли диспетчера пакетов:
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
Ответ 3
Ваша сборка пытается найти \bin\roslyn\csc.exe
потому что в ваш проект были добавлены следующие пакеты. \bin\roslyn\csc.exe
просмотрите ваш файл packages.config
, вы можете иметь их оба
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers
Что такое Roslyn и кто добавил их (пакеты) в проект: если вы используете .net Framework 4.5.2 для создания проектов с использованием VS2015, вы могли заметить, что шаблоны проектов используют Roslyn по умолчанию. На самом деле Roslyn является одним из компиляторов с открытым исходным кодом для языков .NET от Microsoft.
Почему мы должны удалить Roslyn: Если ваш проект имеет ссылки на Roslyn, и вы заинтересованы в его развертывании без сервера, вы получите нежелательные ошибки на сайте, так как многие хостинг-провайдеры все еще не обновили свои серверы и, следовательно, не поддерживают Roslyn. вопрос, вам нужно будет удалить компилятор Roslyn из шаблона проекта.
Если вы не заинтересованы в использовании Roslyn, следуйте инструкциям ниже, чтобы удалить его
1. Удалите пакеты Nuget, используйте следующие команды из консоли пакетов Nuget
PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers
2. После этого ваш файл web.config должен быть автоматически обновлен. Если это не так, найдите приведенный ниже код в файле 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>
<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+"></compiler>
</compilers>
</system.codedom>
Ответ 4
Чистый и ремонт работал для меня!
Ответ 5
Вот более простой способ MSBuild.
<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
<ItemGroup>
<RoslynFiles Include="$(CscToolPath)\*" />
</ItemGroup>
<MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>
Но я замечаю, что файлы roslyn также находятся в моем каталоге bin (а не в папке). Приложение, похоже, работает.
Ответ 6
Попробовав все исправления без сигары, я исправил это, обновив этот пакет Nuget в Visual Studios:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Мой был с 1.0.0 до 2.0.0 для справки (ошибка больше не показывает)
Ответ 7
Я следовал за этими шагами, и это работало отлично
- Удалить все папки bin и obj
- Чистое решение и восстановление
- Запустите эту команду в powershell
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
Ответ 8
Как отмечалось в проблеме в проекте Roslyn на GitHub, решение (которое сработало для меня) заключается в простой выгрузке и перезагрузке проекта в Visual Studio.
Папка "bin\roslyn" не создавалась при сборке или перестройке, пока я не перезагрузил проект.
Ответ 9
![NuGet Package Manager]()
Вам нужно установить Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, специально созданный для этой ошибки
Ответ 10
- Щелкните правой кнопкой мыши по своему проекту и выберите "Управление пакетами Nuget".
- Найти "Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
- Просто обновите до более старой или более новой версии (неважно, какую), а затем снова обновите до исходной версии.
Это переустанавливает все зависимости и файлы пакета (например, csc.exe)
![Nuget - DotNetCompilerPlatform]()
Ответ 11
- Чистое решение
- Перестройте решение, эти два шага спомогли мне.
Ответ 12
Итак, Ответ Роба Кэннона по существу работал у меня, но мне пришлось настроить несколько вариантов. В частности, мне пришлось удалить условие на цель, а также изменить атрибут Include, поскольку $CscToolPath был пуст, когда проект строился на нашем сервере сборки. Любопытно, что $CscToolPath не был пустым при запуске локально.
<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" >
<ItemGroup>
<RoslynFiles Include="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*" />
</ItemGroup>
<MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>
Ответ 13
Обновление пакетов nuget для меня работало
Щелкните правой кнопкой мыши по решению > Управление пакетами NuGet для решения
и обновить все пакеты и особенно:
Microsoft.Net.Compilers
и Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Ответ 14
Это известная проблема с Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6. Понижение до 1.0.5 исправило это для меня.
Ответ 15
В моем случае мне просто нужно было перейти в каталог bin в Visual Studio Solution Explorer (проект веб-приложения) и напрямую включить проект roslyn. Щелкните правой кнопкой мыши папку и выберите "Включить в проект". И снова запустите решение, чтобы запустить процесс сборки.
По умолчанию папка roslyn не была включена.
Ответ 16
В комментариях Daniel Neel выше:
версия 1.0.3 пакета Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget работает для меня, но версия 1.0.6 вызывает ошибку в этом вопросе
Переход к 1.0.3 разрешил эту проблему для меня.
Ответ 17
В моем случае у меня была проблема с Jenkins, когда он пытался развернуть его в Octopus со следующей ошибкой:
MSBUILD : OctoPack error OCT-1676060969: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: System.Exception: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. ---> System.UriFormatException: Invalid URI: The format of the URI could not be determined. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: at System.Uri..ctor(String uriString) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 211 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: --- End of inner exception stack trace --- [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 224 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: at OctoPack.Tasks.CreateOctoPackPackage.AddFiles(XContainer nuSpec, IEnumerable'1 sourceFiles, String sourceBaseDirectory, String targetDirectory, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 443 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: at OctoPack.Tasks.CreateOctoPackPackage.Execute() in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 190 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
Done Building Project "T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj" (default targets) -- FAILED
причина
Потратив некоторое время, я использовал внутренний разработанный компонент, который использовал Microsoft.Net.Compilers
. Причина, по которой внутренний компонент использовал Microsoft.Net.Compilers
состояла в том, чтобы преодолеть эту проблему (С#: генерировать недопустимую компиляцию выражений) и была решена таким образом (Как использовать С# 7 с Visual Studio 2015?). Это приводит к тому, что когда я устанавливал компонент в основную программу, Microsoft.Net.Compilers
добавляется автоматически.
Решение
Мой обходной путь заключался в том, чтобы удалить следующее из нашего внутреннего компонента (после ответа @malikKhalil)
PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers
И выбрал компилятор С# 7 в Jenkins вместо С# 6 и пересоберите, чтобы убедиться, что все работает и собирается правильно.
Затем, наконец, в своей основной программе я попытался обновить свой внутренний компонент. И все, чем строить снова. Он построен без каких-либо проблем или проблем.
Ответ 18
Обновление Microsoft.CodeDom.Providers.DotNetCompilerPlatform от 1.0.0 до 1.0.1 исправило это для меня.
Ответ 19
Откройте файл проекта и удалите все ссылки с помощью Import Project = "..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0....
Откройте web.config и удалите все атрибуты компиляторов system.codedom
Ответ 20
Проблема с шаблонами по умолчанию VS2015 заключается в том, что компилятор фактически не скопирован в каталог {outdir}_PublishedWebsites\tfr\bin\roslyn\
, а скорее в каталог {outdir}\roslyn\
. Вероятно, это отличается от вашей локальной среды, поскольку AppHarbor
создает приложения, используя выходной каталог, вместо того, чтобы создавать решение "на месте".
Чтобы исправить это, добавьте следующее в конец файла .csproj
сразу после блока xml <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>
<PropertyGroup>
<PostBuildEvent>
if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
</PostBuildEvent>
</PropertyGroup>
Ссылка: https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise
Ответ 21
Если вы добавляли ASPNETCOMPILER для компиляции ваших представлений Razor в MVC, например, в fooobar.com/questions/14843/..., затем измените PhysicalPath, чтобы разместить там пакет Roslyn nuget (обычно указываемый через переменную $CscToolPath):
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />
Ответ 22
У меня была такая же проблема во время запуска проекта. вот шаги, которые я выполнил.
Ответ 23
В моем случае, просто удалив все из папки bin и перекомпилировав, все сделал за меня.
Удачи всем, кто имеет эту проблему.
Ответ 24
В моем случае, подобно Basim, был пакет NuGet, который рассказывал компилятору, что нам нужен С# 6, которого мы не сделали.
Нам пришлось удалить пакет NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatform
, который затем был удален:
-
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
version="1.0.0" targetFramework="net452" />
из
Файл package.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>
В system.codedom
node вы можете увидеть, почему он ввел roslyn: compilerOptions="/langversion:6
Ответ 25
Перезагрузите Windows.
Это единственное решение, которое сработало для меня после попытки перестроить, удалить содержимое bin
и перестроить, перезапустить Visual Studio.
Это еще один пример того, насколько ужасны инструменты сборки С#/.NET.
Я думаю (после прочтения многих ответов) общий вывод заключается в том, что причина и решение этой проблемы в значительной степени зависит от установки и проекта, поэтому, если один ответ не работает, попробуйте другой. Попробуйте неинтрузивные/разрушительные решения, такие как перезапуск Visual Studio, перезагрузка, перестройка и т.д., ПЕРВЫЙ, прежде чем связываться с пакетами NuGet или переустановить инструменты разработки. Удачи!
(ПРИМЕЧАНИЕ. При использовании Visual Studio 2019 файл проекта изначально создавался в Visual Studio 2015. Возможно, это поможет кому-то разобраться в проблеме)
(ОБНОВЛЕНИЕ: Может ли это быть вызвано не перезагрузкой после установки/изменения установки Visual Studio или обновления Visual Studio, когда программа установки предложит перезагрузить компьютер?)
Ответ 26
Удалите папку Bin в своем браузере решений и снова создайте решение. Это решило бы проблему
Ответ 27
У меня была такая же проблема при установке моего приложения на сервере, когда все работало отлично на локальном хосте.
Ни одно из этих решений не было, у меня всегда была такая же ошибка:
Could not find a part of the path 'C:\inetpub\wwwroot\myApp\bin\roslyn\csc.exe'
Я закончил это:
- в моем проекте настройки, в правом клике, в представлении > файловой системе
- создать папку
bin/roslyn
- выберите add > files и добавьте все файлы из
packages\Microsoft.Net.Compilers.1.3.2\tools
Это решило мою проблему.
Ответ 28
Кроме удаления директории Bin из всех проектов внутри решения, также удалите папки obj.
В основной директории решения удалите папку .vs
Сработал для меня, когда попытался перенести уже готовый проект в пустое решение, созданное в git.
Ответ 29
У меня есть webproject без файла csproj, и упомянутые здесь решения не работают для меня.
Изменение целевой платформы .NET, переустановка пакетов (Update-Package -reinstall
), а затем Update-Package -reinstall
проекта помогли мне. Вы даже можете изменить целевой фреймворк после этой операции (сделайте так, чтобы вы переустанавливали пакеты nuget снова после).
Ответ 30
Добавить свойствоGroup в файл .csproj
<PropertyGroup>
<PostBuildEvent>
if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
</PostBuildEvent>
</PropertyGroup>