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

358

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

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

Не удалось найти часть пути 'C:\B8akWorkspace\B8akProject\B8akSolution\B8AK.Portal\Bin\Рослин\csc.exe'.

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

Изображение 25

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

  • 9
    Может кто-нибудь объяснить, почему это необходимо в рамках работы скомпилированного приложения ASP.NET? Для чего он использует csc.exe?
  • 1
    Я думаю, что это объясняет участие Рослина : blogs.msdn.microsoft.com/webdev/2014/05/12/…
Показать ещё 6 комментариев
Теги:
asp.net-mvc
roslyn

38 ответов

198
Лучший ответ

Проблема с шаблонами 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>
  • 4
    Это не решает мою проблему. Теперь я получаю «Не удалось найти файл» C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe ' . Обратите внимание, что когда я создаю новый проект MVC в VS2015, я не вижу упомянутую конфигурацию в .csproj, и она отлично работает в браузере
  • 1
    Благодарю. Теперь я могу собрать и запустить проект в браузере после того, как я скачал каталог Roslyn и поместил его в папку / bin. Я не ставил PstBuildEvent, упомянутый выше, и он все еще работает. Возможно, вы хотите отредактировать свой ответ выше и упомянуть о необходимости вручную размещать файлы Roslyn и лучше отражать решение.
Показать ещё 11 комментариев
388

В моем случае решение было переустановить/обновить пакеты 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

  • 5
    Это была моя проблема - папка bin / roslyn существует при создании проекта, однако, если вы удалите его или, как и контроль исходного кода, он не будет скопирован, то он не будет восстановлен. Я думаю, что есть некоторая проблема с синхронизацией с версиями, после установки 1.0.1 и обновления файла «Импорт в proj» до правильной версии, сборка автоматически скопирует папку Roslyn - нет необходимости ни в одном из этих постов. строить команды.
  • 11
    Я уверен, что это лучшее решение ... попробую сам с пакетом обновлений -reinstall -projectname myprojectname
Показать ещё 13 комментариев
124

Ваша сборка пытается найти \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>
  • 0
    Я удалил все, но все еще получаю эту ошибку, есть идеи?
  • 22
    Это не совсем решение, если вы действительно хотите использовать новый компилятор и новые функции.
Показать ещё 8 комментариев
52

Вот более простой способ 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 (а ​​не в папке). Приложение, похоже, работает.

  • 4
    Вы можете поместить его в любом месте вашего файла .csproj на том же уровне, что и другой тег <Target>. Я обычно кладу это на дно.
  • 0
    Это действительно должен быть принятый ответ. Вы можете проверить это в источнике, и следующему бедному чмо, который тянет ваш репо, не придется проходить через ту же проблему.
42

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

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

  • 4
    Я не думаю, что чистота требуется. В соответствии с этим обсуждением проблемы перестройка, а не обычная сборка, всегда возвращает файл roslyn. github.com/dotnet/roslyn/issues/15556
  • 0
    Я также просто запустил Build> Rebuild Solution, и ошибка исчезла.
Показать ещё 6 комментариев
14

Изображение 1108

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

  • 0
    Это не сработало - я подозреваю, что пакет на самом деле не для этой конкретной цели.
  • 0
    Я тестировал с VS 2017, и он работает нормально, это может быть проблемой с другими версиями.
11

Попробовав все исправления без сигары, я исправил это, обновив этот пакет Nuget в Visual Studios:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Мой был с 1.0.0 до 2.0.0 для справки (ошибка больше не показывает)

  • 1
    Это было и для меня. Даже 2.0.0 был слишком низким для моего проекта, он требовал 2.0.1.
  • 1
    Это решило это для меня. Я понизил рейтинг, который, должно быть, устранил проблему, а затем обновил до последней версии.
Показать ещё 1 комментарий
11

Итак, Ответ Роба Кэннона по существу работал у меня, но мне пришлось настроить несколько вариантов. В частности, мне пришлось удалить условие на цель, а также изменить атрибут 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>
  • 0
    Поведение еще хуже. Локально, если вы перейдете в папку вашего пакета и удалите две папки Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.nn и соберете свой код, то $ CscToolPath будет пустым. Если вы построите второй раз, то он не будет пустым. Проблема постоянно возникает на вашем сервере сборки, потому что он всегда рассматривается как «первая сборка». Ваш код работает отлично, но если вы обновите пакет Microsoft.Net.Compilers , вам придется обновить .csproj . Спасибо.
  • 2
    Обратите внимание, что это решение не будет работать (или должно быть скорректировано), если версия Microsoft.Net.Compilers изменится.
Показать ещё 1 комментарий
9

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

  • 0
    Это правильно. Я столкнулся с этой проблемой с версией 1.0.6 только при публикации в Azure. Понижение до 1.0.5 работ
  • 0
    Не работает ни в одной версии для меня
8

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

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

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

  • 3
    1.0.6 содержит ошибку: github.com/aspnet/RoslynCodeDomProvider/issues/13
  • 0
    @akatakritos это помогло. Я искал часами. Спасибо вам обоим.
Показать ещё 4 комментария
8

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

8

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

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

6

В моем случае у меня была проблема в 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 и пересобрал, чтобы убедиться, что все работает и собирается правильно.

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

6

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

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

5

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

5

Если вы добавляли ASPNETCOMPILER для компиляции ваших представлений Razor в MVC, например, в https://stackoverflow.com/questions/383192/compile-views-in-asp-net-mvc, затем измените PhysicalPath, чтобы разместить там пакет Roslyn nuget (обычно указываемый через переменную $CscToolPath):

<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />

5

Проблема с шаблонами по умолчанию 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

  • 1
    Параметр / d копирует только новые файлы (означает «дата»). Имейте в виду развертывание в облаке / лазури, где время может быть позади / впереди местного времени.
4

В моем случае, подобно 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

  • 1
    Все, что мне нужно было сделать, это удалить пакет NuGet «Microsoft.CodeDom.Providers.DotNetCompilerPlatform», и это решило его для меня (мой проект нацелен на .NET 4.5.2).
  • 1
    Это сработало для меня. Вы также захотите удалить Microsoft.Net.Compilers, так как нет никаких оснований для сохранения этой дополнительной зависимости.
3

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

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

  • 0
    Это «сайт проекта». Я использовал эту команду, чтобы просто переустановить один пакет: update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall
3

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

  • Щелкните правой кнопкой мыши в решении
  • выберите "Чистое решение"
  • После завершения очистки снова создайте проект
  • Запустите проект еще раз

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

3

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

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

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

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

2

Чистые решения строить Run

В моем случае это сработало. Удачи.

2

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

  • 0
    Спасибо! Это сработало и для меня. В дополнение к этому я обновил все свои пакеты nuget
2

Добавить свойство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>
  • 0
    У меня не сработало, все переменные не определены (пусто)
1

Кроме удаления директории Bin из всех проектов внутри решения, также удалите папки obj.

В основной директории решения удалите папку .vs

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

  • 0
    Это лучшее решение, так как оно не требует изменения исходного кода.
1

У меня была эта ошибка для Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.06 но также с 1.0.7 которая работала для @PrisonerZERO. Однако, когда Microsoft выпустила 1.0.8 2017-10-18, она, наконец, снова заработала для меня, и мне не пришлось понижать рейтинг.

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

1

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

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

1

FYI...

По состоянию на 8/31/2017 обновление до Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.7 работает.

1

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

1

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

0

Я следовал за этими шагами, и это работало отлично

  • Удалить все папки bin и obj
  • Чистое решение и восстановление
  • Запустите эту команду в powershell

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

  • 0
    Это сработало для меня!
0

Это можно сделать следующим простым способом:

  • Создайте новый проект подобного типа в любой точке вашей системы. Создайте его и скопируйте в папку roslyn в каталог bin.
0

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

  <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />

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

0

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

<Target Name="CopyRoslynCompilerFilesToPublishedWebsitesDirectory" AfterTargets="AfterBuild" Condition="Exists('$(OutDir)\_PublishedWebsites\$(TargetName)')">
    <Copy SourceFiles="@(RoslyCompilerFiles)" DestinationFolder="$(OutDir)\_PublishedWebsites\$(TargetName)\bin\roslyn" ContinueOnError="true" SkipUnchangedFiles="true" />
</Target>

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

0

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

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

Была обнаружена попытка переопределения существующего сопоставления для типа Microsoft.CodeAnalysis.ICompilationUnitSyntax с именем "", который в настоящее время сопоставляется с типом Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax, чтобы ввести Microsoft.CodeAnalysis.VisualBasic.Syntax.CompilationUnitSyntax.

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

Теперь мои проекты-нарушители .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>
<Target Name="DeleteDuplicateAnalysisFiles" AfterTargets="AfterBuild">
   <!-- Jenkins now has copies of the following files in both the bin directory and the 'bin\rosyln' directory. Delete from bin. -->
   <ItemGroup>
     <FilesToDelete Include="$(WebProjectOutputDir)\bin\Microsoft.CodeAnalysis*.dll" />
   </ItemGroup>
   <Delete Files="@(FilesToDelete)" />
</Target>

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

0

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

<MvcBuildViews>false</MvcBuildViews>

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

0

Проблема

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

Fix

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

$(WebProjectOutputDir)\bin\bin\rosalyn

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

-2

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

<!--  <Import Project="..\..\..\DAS\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\..\..\DAS\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" /> -->

Ещё вопросы

Сообщество Overcoder
Наверх
Меню