Не удалось найти часть пути... 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=\&quot;Web\&quot; /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

  1. Чистое решение
  2. Перестройте решение, эти два шага спомогли мне.

Ответ 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

Ответ 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=\&quot;Web\&quot; /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>