Не удалось найти часть пути … bin \ roslyn \ csc.exe

Я пытаюсь запустить проект Asp.net MVC, полученный из источника управления TFS. Я добавил все ссылки на сборку, и я могу строить и компилировать файлы без каких-либо ошибок или предупреждений.

Но в браузере я получаю следующую ошибку:

Не удалось найти часть пути «C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe».

Вот полный скриншот страницы с ошибкой.

введите описание изображения здесь

После нескольких дней исследований я понял, что Roslyn – это платформа .NET-компилятора, которая предлагает расширенные функции компиляции. Однако я не понимаю, почему моя assembly пытается найти \ bin \ roslyn \ csc.exe, потому что я не настроил ничего, связанное с Roslyn, и я не намерен использовать Roslyn в моем проекте.

    30 Solutions collect form web for “Не удалось найти часть пути … bin \ roslyn \ csc.exe”

    Проблема с шаблонами VS2015 по умолчанию заключается в том, что компилятор фактически не скопирован в каталог tfr \ bin \ roslyn \, а скорее в каталог {outdir} \ roslyn \

    Добавьте этот код в свой файл .csproj:

           

    В моем случае решением было переустановить / обновить пакеты Nuget:

    • Microsoft.Net.Compilers 1.1.1
    • Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.1

    Затем я просмотрел .csproj и убедился, что пути к пакетам верны (в моем случае .. \ .. \ packages \ *. *) Внутри тегов сверху и в с именем «EnsureNuGetPackageBuildImports» на дно. Это на MVC 5 и .NET Framework 4.5.2.

    Краткий ответ – запустите это в консоли диспетчера пакетов:

    PM > update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

    Ваша assembly пытается найти \bin\roslyn\csc.exe потому что в ваш проект добавлены следующие пакеты. \bin\roslyn\csc.exe просмотрите файл packages.config , вы можете иметь их обоих там

     Microsoft.CodeDom.Providers.DotNetCompilerPlatform Microsoft.Net.Compilers 

    Что такое Roslyn и Who, которые добавили их (пакеты) в проект: Если вы используете .net Framework 4.5.2 для создания проектов с использованием VS2015, возможно, вы заметили, что шаблоны проектов используют Roslyn по умолчанию. На самом деле Roslyn является одним из компиляторов с открытым исходным кодом для языков .NET от Microsoft.

    Почему мы должны удалить Roslyn: если ваш проект имеет ссылки Roslyn, и вы заинтересованы в его развертывании без сервера, вы получите нежелательные ошибки на веб-сайте, так как многие хостинг-провайдеры все еще не обновили свои серверы и, следовательно, не поддерживают Roslyn. Чтобы решить эту проблему вы должны удалить компилятор Roslyn из шаблона проекта.

    если вы не заинтересованы в использовании Roslyn, выполните шаги ниже, чтобы удалить его

    1. Удалите пакеты Nuget, используйте следующие команды из консоли Nuget Package Console

     PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform PM> Uninstall-package Microsoft.Net.Compilers 

    2. После этого ваш файл web.config должен быть автоматически обновлен. Если это не так, найдите приведенный ниже код в файле web.config, и если он найден, удалите этот fragment кода.

           

    Вот более простой способ MSBuild.

            

    Но я замечаю, что файлы roslyn также находятся в моем каталоге bin (а ​​не в папке). Однако приложение работает.

    Чистая и перестроенная работа для меня!

    Редактировать: комментаторы говорят, что чистый шаг не нужен. Вы можете просто перестроить.

    Итак, ответ Роба Кэннона по существу работал для меня, но мне пришлось настроить несколько вариантов. В частности, мне пришлось удалить условие на цель, а также изменить атрибут Include, поскольку $ CscToolPath был пуст, когда проект строился на нашем сервере сборки. Любопытно, что $ CscToolPath не был пустым при запуске локально.

            

    По комментариям Daniel Neel выше:

    версия 1.0.3 пакета Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget работает для меня, но версия 1.0.6 вызывает ошибку в этом вопросе

    Переход к 1.0.3 разрешил эту проблему для меня.

    Это известная проблема с Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6. Переход на 1.0.5 исправил это для меня.

    В моем случае мне просто нужно было перейти в каталог bin в Visual Studio Solution Explorer (проект веб-приложений) и напрямую включить проект roslyn. Щелкните правой кнопкой мыши папку и выберите «Включить в проект». И снова запустите решение, чтобы запустить процесс сборки.

    Папка roslyn не была включена по умолчанию.

    Откройте файл проекта и удалите все ссылки с помощью Import Project = “.. \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ….

    Откройте web.config и удалите все атрибуты компиляторов system.codedom

    Обновление пакетов nuget для меня. Щелкните правой кнопкой мыши на решении> Управление пакетами NuGet для решения и обновите все пакеты и особенно: Microsoft.Net.Compilers и Microsoft.CodeDom.Providers.DotNetCompilerPlatform

    Если вы добавляли ASPNETCOMPILER для компиляции ваших представлений Razor в MVC, как в этом вопросе StackOverflow , измените PhysicalPath, чтобы разместить там пакет Roslyn nuget (обычно указываемый переменной $ CscToolPath ):

       

    Проблема с шаблонами по умолчанию VS2015 заключается в том, что компилятор фактически не скопирован в {outdir}_PublishedWebsites\tfr\bin\roslyn\ , а скорее в {outdir}\roslyn\ . Это, вероятно, отличается от вашей локальной среды, поскольку AppHarbor строит приложения, используя выходной каталог, вместо того, чтобы создавать решение «на месте».

    Чтобы исправить это, добавьте следующее в конец файла .csproj сразу после блока xml ...

       if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn" start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"   

    Ссылка: https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise

    Модернизация Microsoft.CodeDom.Providers.DotNetCompilerPlatform от 1.0.0 до 1.0.1 исправила это для меня.

    В моем случае у меня была проблема в 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 состоял в том, чтобы преодолеть эту проблему ( C #: выбросить недопустимую компиляцию выражения ) и был решен таким образом ( как использовать c # 7 с Visual Studio 2015? ). В результате, когда я установил компетентную основную программу, Microsoft.Net.Compilers автоматически добавят ее.

    Решение

    Моя работа была удалена из нашего внутреннего компонента (после ответа @malikKhalil)

     PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform PM> Uninstall-package Microsoft.Net.Compilers 

    И выбрал компилятор C # 7 в Jenkins вместо C # 6 и перестроил, это значит, что все работает и правильно строится.

    Затем, наконец, в моей основной программе я попытался обновить свой внутренний компонент. И все, чем строить снова. Он построил без проблем и проблем.

    введите описание изображения здесь

    Вам необходимо установить Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, специально созданный для этой ошибки

    В моем случае, подобно Basim, был пакет NuGet, который рассказывал компилятору, что нам нужен C # 6, которого мы не сделали.

    Нам пришлось удалить пакет NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatform который затем удалил:

    1. из файла packages.config

    В узле system.codedom вы можете понять, почему он ввел roslyn: compilerOptions="/langversion:6

    Добавить PropertyGroup в файл .csproj

       if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn" start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"   

    У меня была такая же проблема при установке моего приложения на сервер, когда все работало отлично на localhost.

    Ни одно из этих решений не было, у меня всегда была такая же ошибка:

     Could not find a part of the path 'C:\inetpub\wwwroot\myApp\bin\roslyn\csc.exe' 

    Я закончил это:

    • в моем проекте настройки, правой клике, view> файловой системе
    • создать папку bin/roslyn
    • выберите add> files и добавьте все файлы из packages\Microsoft.Net.Compilers.1.3.2\tools

    Это решило мою проблему.

    У меня также была такая же проблема во время запуска проекта. вот шаги, которые я последовал.

    1. Правый клик в решении
    2. выберите «Очистить»
    3. После того, как чистый преуспел, снова создайте свой проект
    4. Запустите проект еще раз

      На этот раз я не вижу такой же ошибки. Это работает как ожидалось

    Удалите папку Bin в своем браузере решений и снова создайте решение. Это решило бы проблему

    Я столкнулся с этой проблемой после обновления некоторых пакетов через NuGet. Для меня работала перестройка (вместо обычной сборки).

    У меня была такая же проблема после обновления DotNetCompilerPlatform. Решено перезапустить Visual Studio> Очистить проект> Построить проект.

    мое решение использует Nuget для обновления ниже элементов до последней версии: – Microsoft.Net.Compilers – Microsoft.CodeDom.Providers.DotNetCompilerPlatform Затем перестроил проект. Так как мой проект – это веб-сайт, то нет файла * .csproj. Вышеприведенная ошибка появляется, когда я пытаюсь просмотреть cshtml в браузере.

    Ошибка, исправленная после двух вышеперечисленных элементов, обновленных до последней версии. Я в VS2015 и Windows7 SP1

    У меня есть webproject без файла csproj, и решения, упомянутые здесь, не работают для меня.

    Изменение целевой платформы .NET, переустановка пакетов ( Update-Package -reinstall ), а затем создание проекта работало для меня. Вы можете даже изменить целевую структуру после этой операции (заставьте повторно повторно установить пакеты nuget после).

    вопрос

    Имейте в виду, что NuGet PM нарушает поведение Розалин. Нажмите « Tools > NuGet Package Manager > Manage NuGet Packages for Solution Если обновление существует для Microsoft.CodeDom.Providers.DotNetCompilerPlatform , Microsoft.Net.Compilers или Microsoft.Net.Compilers.netcore , обновите их, и решение сломается! Это происходит потому, что шаблоны ASP-сайтов настроены на использование определенных версий при создании проекта. Чтобы увидеть проблему, нажмите «Показать все файлы» в обозревателе решений.

    исправлять

    При создании проекта $(WebProjectOutputDir)\bin не существует, поэтому, когда Rosalyn добавляется как зависимость от NuGet, он устанавливает его правильно. После обновления пакетов решений $(WebProjectOutputDir)\bin выглядит так:

    $(WebProjectOutputDir)\bin\bin\rosalyn

    Самое простое исправление: Cut & Paste rosalyn в нужном месте, а затем удалить дополнительную папку bin . Теперь вы можете обновить страницу и загрузить сайт.

    Мне пришлось изменить файлы проекта WebAPI и MVC, чтобы не создавать представления:

     false 

    Это разрешило мою ошибку сервера сборки TFS 2015 Build с roslyn. Все еще не уверен, почему csc.exe был скопирован в \ bin \ csc.exe, но процесс публикации искал \ bin \ Roslyn \ csc.exe … не смог найти преобразование, вызывающее это несоответствие.

    Я испытал эту ошибку на сервере сборки Jenkins, на котором запущен MSBuild, который выводит файлы сборки в отдельную папку (_PublishedWebsites). Точно так же – папка roslyn не была в каталоге bin, и все файлы roslyn были сосредоточены в файлах bin.

    Ответ @ igor-semin был единственным, что сработало для меня (поскольку я использую возможности языка C # 6, я не могу просто удалить пакеты nuget в соответствии с другими ответами), но поскольку я также запускаю CodeAnalysis, я получаю другая ошибка на моем целевом сервере развертывания:

    Попытка переопределить существующее сопоставление была обнаружена для типа Microsoft.CodeAnalysis.ICompilationUnitSyntax с именем «», в настоящее время сопоставленным с типом Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax, чтобы ввести Microsoft.CodeAnalysis.VisualBasic.Syntax.CompilationUnitSyntax.

    Причиной этого является то, что по мере того, как файлы roslyn сбрасываются в каталог основного bin, когда вы запускаете xcopy для их воссоздания в вложенной папке roslyn, у вас теперь есть 2 копии этих файлов, которые компилируются, и между ними происходит столкновение , После долгих разочарований я решил «исправить взлом» – дополнительную задачу после сборки, чтобы удалить эти файлы из каталога bin, удалив конфликт.

    Теперь .csproj моих оскорбительных проектов выглядит так:

    ………………. больше здесь ………………….

        if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn" start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"          

    ………………. больше здесь ………………….

    Я столкнулся с этой проблемой с конвейером публикации (который создает каталог _PublishedWebsites) и использовал это как цель в проекте:

        

    Недостатком является то, что на выходе будут две копии файлов Roslyn.

    У меня была эта ошибка после переименования решения и некоторых включенных проектов и игры с удалением пакетов nuget. Я сравнил новый проект с последним рабочим проектом и обнаружил, что следующие строки отсутствуют, и их необходимо добавить еще:

         

    Для этого я решил проблему.

    Давайте будем гением компьютера.