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

813

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

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

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

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

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

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

Eyad
источник
10
Может кто-нибудь объяснить, почему это необходимо в рамках работы скомпилированного приложения ASP.NET? Для чего он использует csc.exe?
gregmac
1
Я думаю, что это объясняет участие Рослина: blogs.msdn.microsoft.com/webdev/2014/05/12/…
andy250
4
Папка roslyn не копировалась в папку bin. Я исправил ее, установив нижеприведенный установочный пакет Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Абдулла Тахан,
12
Переустановка Microsoft.CodeDom.Providers.DotNetCompilerPlatform решила мою проблему.
SurenSaluka
4
У меня было это после открытия моего проекта в VS 2019. Ранее он работал на VS 2017. Я обнаружил, что просто понижение Microsoft.CodeDom.Providers.DotNetCompilerPlatform до любой предыдущей версии, а затем возврат к последней версии решило проблему. Это исправило некоторые проблемы в моем .csprojфайле.
Нео

Ответы:

436

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

Добавьте этот код в ваш файл .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>
Mitchell
источник
9
Это не решает мою проблему. Теперь я получаю «Не удалось найти файл» C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe ' . Обратите внимание, что когда я создаю новый проект MVC в VS2015, я не вижу упомянутой конфигурации в .csproj, и она отлично работает в браузере
Eyad
4
Спасибо. Теперь я могу собрать и запустить проект в браузере после того, как я скачал каталог Roslyn и поместил его в папку / bin. Я не ставил PstBuildEvent, упомянутый выше, и он все еще работает. Возможно, вы захотите отредактировать свой ответ выше и упомянуть необходимость вручную размещать файлы Roslyn и лучше отражать решение.
Eyad
2
Ну, в нормальной ситуации; у вас должен быть компилятор внутри вашей папки $ (OutDir) roslyn *. *, поэтому этот скрипт скопирует компилятор в папку вашего проекта. Видимо ваша установка vs2015 не включала компилятор.
Митчелл
9
Я обнаружил, что обновление Microsoft.CodeDom.Providers.DotNetCompilerPlatform до версии 1.0.8 и Microsoft.Net.Compilers 2.6.1 мне очень помогли. Мне не нужно было добавлять эту дополнительную цель. Похоже , что - то подобное было добавлено в более поздней версии инструмента: github.com/aspnet/RoslynCodeDomProvider/commit/...
Ian Robertson
5
Я обновил версию Microsoft.Net.Compilers до версии 2.10.0 от Nuget, и это было для меня решением. Я использую targetFramework = "4.6.2"
juanytuweb
1163

TL; DR

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

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

Больше информации

Эта проблема не связана с самой Visual Studio, поэтому ответы, предлагающие добавить шаги сборки для копирования файлов, являются скорее обходным путем. То же самое с добавлением двоичных файлов компилятора вручную в проект.

Компилятор Roslyn происходит из пакета NuGet, и в некоторых версиях этого пакета была / была ошибка (я точно не знаю, какие из них). Решение состоит в том, чтобы переустановить / обновить этот пакет до версии без ошибок. Первоначально, прежде чем я написал ответ в 2015 году, я исправил его, установив следующие пакеты в определенных версиях:

  • 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.

andy250
источник
11
Это была моя проблема - папка bin / roslyn существует при создании проекта, однако, если вы удаляете его или, как и контроль исходного кода, он не копируется, то он не восстанавливается. Я думаю, что есть некоторая проблема с синхронизацией с версиями, после установки 1.0.1 и обновления файла «Импорт в proj» до правильной версии, сборка автоматически скопирует папку Roslyn - никакой из этих публикаций не нужно строить команды.
Шут
16
Я почти уверен, что это лучшее решение ... попробую сам с пакетом обновлений -reinstall -projectname myprojectname
cr1pto
5
После всего этого ничего не изменилось для моего проекта. Папка с мусором все еще расплющена.
brianary
8
Одно замечание: у меня работает версия 1.0.3 пакета Nuget Microsoft.CodeDom.Providers.DotNetCompilerPlatform, но версия 1.0.6 вызывает ошибку в этом вопросе.
Даниэль Нил
5
1.0.6 содержит ошибку: github.com/aspnet/RoslynCodeDomProvider/issues/13
akatakritos
176

Ваша сборка пытается найти, \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>
Малик Халил
источник
28
Это не совсем решение, если вы действительно хотите использовать новый компилятор и новые функции.
Матти Вирккунен
14
Вы выступаете против будущего.
cchamberlain
2
@cchamberlain почему это будущее? Я просто думаю, что это должно быть прямолинейно, но похоже, что у многих людей возникают проблемы с этим.
Alisson
1
@Alisson - Roslyn - это направление, в котором движутся вещи. Оно содержит новые языковые функции, более производительно, кроссплатформенно и с открытым исходным кодом. Это вышло после других инструментов - отсюда и будущее. Ничто не говорит о том, что вам нужно его использовать, большинство обновлений требуют определенных затрат. Смотрите "Почему компиляция Roslyn в ASP.NET?" раздел: blogs.msdn.microsoft.com/webdev/2014/05/12/…
cchamberlain
1
Если вы хотите опубликовать проект MVC на общедоступном хостинге Windows GoDaddy, это ответ. GoDaddy не запускает такие исполняемые файлы, как csc.exe
Jeson Martajaya
141

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

pipedreambomb
источник
4
Я не думаю, что чистота требуется. В соответствии с этим обсуждением проблемы перестройка, а не обычная сборка, всегда возвращает файл roslyn. github.com/dotnet/roslyn/issues/15556
leemicw
Я также просто запустил Build> Rebuild Solution, и ошибка исчезла.
Мэтт Меррилл
Перестройка решена для меня, я заметил это в выводеCopying file from "C:\Users\medmondson\Source\UK\Portal\Branches\v12\Source\packages\Microsoft.Net.Compilers.1.3.2\tools\csi.exe" to "bin\Debug\roslyn\csi.exe".
m.edmondson
12
Просто восстановление не сработало для меня .. После Clean + Rebuild ошибка исчезла.
Бруно Микелин
2
DotNetCompilerPlatform 1.0.3, Microsoft.Net.Compilers 1.3.2, VS Pro 2017 15.9.4 здесь. Очистка / восстановление не работала для меня даже до и после перезапуска Visual Studio. Наконец, Build> Batch Build ...> Rebuild All сделали свое дело. Должно быть, он прошептал только правильное «сладкое», чтобы VS увидел, что в выводе отсутствует каталог bin / roslyn.
Иоганн
59

Вот более 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>. Я обычно кладу это на дно.
Роб Кэннон
Это действительно должен быть принятый ответ. Вы можете проверить это в источнике, и следующему бедному чмо, которое тянет ваш репо, не придется проходить через ту же проблему.
Эндрю Клир
37

Как отмечено в выпуске в проекте Roslyn на GitHub , решение (которое сработало для меня) заключается в простой выгрузке и перезагрузке проекта в Visual Studio.

Папка «bin \ roslyn» не создавалась при сборке или перестройке, пока я не перезагрузил проект.

Кристиан Давен
источник
Спасибо, у меня это сработало. Проблема в репозитории dotnet была открыта в 2016 году, и у нас все еще есть эта проблема в Visual Studio 2019. Я не могу поверить, что это реально!
Фелипе Ориани
26

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

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

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

Масуд Дарвишян
источник
22

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

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

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

josh.thomson
источник
3
Это было и для меня. Даже 2.0.0 был слишком низким для моего проекта, он требовал 2.0.1.
Есьман
3
Это решило это для меня. Я понизил рейтинг, который, должно быть, исправил проблему, а затем обновил до последней версии.
Даниэль Джексон
1
Я тоже это сделал. Теперь roslynпапка создается в моем пути вывода. Я также не вижу ссылки на "roslyn" в моем csproj. Может быть , Target Name="CopyRoslyn...это вещь VS2015 и не нужна (версия) 2017 года у меня. Стоит отметить: так как я обновил DotnetCompilerPlatform перед тем, как поиграться с добавлением цели копирования (той, о которой я упоминал), у меня есть более чистый csproj.
LosManos
1
Это только что случилось со мной. Этот пост спасатель. Я постоянно получаю одно и то же сообщение об ошибке, и это всегда кажется совершенно другой причиной!
Брайан Кноблаух
19
  1. Чистый раствор
  2. Перестрой решение, эти два шага сработали для меня.
nischa
источник
Спасибо, это сработало и для меня.
Джои Филлипс
1
Работает. Я случайно нажал, Ctrl Cкогда проверял филиал, gitи это испортило мой репо. git reset --hardне сработало, поэтому мне git clean -xdfи пришлось перестроить проект. Однако я столкнулся с этой ошибкой, поэтому я просто очистил и заново собрал проект, и он сработал для меня.
Пол Карлтон
15

NuGet Package Manager

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

Адриан Берка
источник
Это не сработало - я подозреваю, что пакет на самом деле не для этой конкретной цели.
Дрю Миллер
Я тестировал с VS 2017, и он работает нормально, это может быть проблемой с другими версиями.
Хуан Акоста
11
Я не устанавливаю случайные пакеты от случайного человека с псевдонимом "dsx". Это большая безопасность, нет ...
Mateusz
1
@Mateusz или тот, который исправит мою структуру папок, не относящихся к APS.NET [sic]
Элиасар
14
  • Щелкните правой кнопкой мыши по своему проекту и выберите «Управление пакетами Nuget».
  • Найти "Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
  • Просто обновите до более старой или более новой версии (неважно, какую), а затем снова обновите до исходной версии.

Это переустанавливает все зависимости и файлы пакета (например, csc.exe)

Nuget - DotNetCompilerPlatform

Боян
источник
Это исправило это для меня! Спасибо!
Мейсон
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>
jonnybot
источник
1
Поведение еще хуже. Локально, если вы перейдете в папку вашего пакета и удалите две папки Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.nn и создадите свой код, то $ CscToolPath будет пустым. Если вы построите второй раз, то он не будет пустым. Проблема постоянно возникает на вашем сервере сборки, потому что он всегда рассматривается как «первая сборка». Ваш код работает отлично, но если вы обновите пакет Microsoft.Net.Compilers , вам придется обновить .csproj . Спасибо.
Жюльен Д.
3
Обратите внимание, что это решение не удастся (или должно быть скорректировано), если версия Microsoft.Net.Compilers изменится.
JanDotNet
Я обновил платформу Microsoft.CodeDom.Providers.DotNetCompilerPlatform, а затем смог продолжить.
iowatiger08
10

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

hichamkazan
источник
Это сработало для меня на этот раз. Отсутствующая ошибка Roslyn / csc.exe появляется у меня постоянно, и решение часто
Brian Knoblauch
10

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

jrummell
источник
Это правильно. Я столкнулся с этой проблемой с версией 1.0.6 только при публикации в Azure. Понижение до 1.0.5 работ
Аугусто Баррето
Понизился с 2.0.0 до 1.0.5 и все заработало. Однако в то время я ел бутерброд с индейкой, который, вероятно, был частично ответственен за решение. Иди разберись.
barneymc
10

Для VS 2019 полностью удалите следующий узел:

<system.codedom>
</system.codedom>
Шади Намроути
источник
9

За комментарий Даниэля Нила выше:

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

Понижение до 1.0.3 решило эту проблему для меня.

Джейсон Койн
источник
3
1.0.6 содержит ошибку: github.com/aspnet/RoslynCodeDomProvider/issues/13
akatakritos
@akatakritos это помогло. Я искал часами. Спасибо вам обоим.
erincerol
2
На 1.0.7 все еще влияют определенные сценарии github.com/aspnet/RoslynCodeDomProvider/issues/17
17
1
1.0.5 - самая последняя версия, которая работала для меня (1.0.6 и 1.0.7 генерируют ошибку)
Патрик
То же самое, я был 1.0.7, и это не сработало. 1.0.3 работает. Я не пробовал ничего более высокого, так как я только что потратил последний час своей жизни на эту проблему, и я больше не балуюсь этим, теперь он работает!
Филипп Стратфорд
9

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

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

maytham-ɯɐɥʇʎɐɯ
источник
9

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

  1. Щелкните правой кнопкой мыши в решении
  2. выберите Чистый раствор
  3. После того, как очистка удалась, снова построить свой проект
  4. Запустите проект снова

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

нарендра
источник
Коллеги сообщили, что обновление пакета NuGet из консоли работает, но это также работает без запуска какой-либо команды. Мой выбранный ответ.
Цемер
8

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

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

Мартейн ван Хален
источник
7

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

Бен
источник
6

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

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

user6326076
источник
6

Как уже было отмечено /programming/32780315#34391473 , быстрое исправление использовать менеджер пакетов, Tools> Nuget Package Manager> Package Manager Console, чтобы запустить

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

Консоль Packet Manager - как открыть

Но альтернативное решение (которое автоматически и бесшумно воссоздает ваши пакеты, если они отсутствуют) - удалить атрибут Web.configфайла вашего проекта .
( Web.configнаходится в том же каталоге, что и ваш.csproj файл.)

Откройте Web.configфайл в текстовом редакторе (или внутри Visual Studio).
- В теге configuration> system.codedom> compilers> compiler language="c#;cs;csharp", полностью удалить typeатрибут.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- ... -->
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /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.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>
</configuration>

Короче, удалите строку, которая начинается с type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.

(Предположительно, такое же исправление работает и для Visual Basic, и для Csharp, но я не пробовал.)

Visual Studio позаботится обо всем остальном. Нет больше Server Error in '/' Application.

В приведенном выше примере кода, который я указал в zip-файле, вы получите, HTTP Error 403 когда нажмете Ctrl+ F5.

Ошибка HTTP 403.14 - запрещено

Попробуйте заменить http://localhost:64195в вашем веб-браузере на http://localhost:64195/api/products.
Веб-API теперь отображается следующим образом:

Веб-API, содержащий продукты

В качестве провокации я попытался удалить весь packageкаталог моего решения Visual Studio.
Он был автоматически и беззвучно воссоздан, как только я (пере) построил его.


И последнее, но не менее важное, вот код, который воспроизводит ошибку: http://schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip (Первоначально из https://github.com/aspnet/AspNetDocs/tree/master/aspnet / web-api / обзор / расширенный / вызов-web-api-from-a-net-client / образец / сервер / ProductsApp )

Ошибка сервера

Хенке
источник
6

В моем случае, просто удалив все из папки bin и перекомпилировав, все сделал за меня.

Хуан Марти
источник
2
Я думаю, что это более просто и эффективно. Обычно я получаю эту ошибку после клонирования проекта из репозитория в новый компьютер.
Джонатан Ортега
После этого я получил 403 Forbidden от IIS Express при запуске в отладчике. Перезапуск Visual Studio тоже не помог, но перезагрузка Windows сделала.
Флориан зима
5

Если вы добавляете ASPNETCOMPILER для компиляции ваших представлений Razor в MVC, как в этом вопросе StackOverflow , то измените PhysicalPath, чтобы он размещал место, где находится пакет нулетов Roslyn (обычно указываемый через переменную $ 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

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

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

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

  1. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" /> из файла packages.config
  2. <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узле вы можете увидеть, почему он привел Рослин:compilerOptions="/langversion:6

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

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

user1903050
источник
Спасибо! Это сработало и для меня. В дополнение к этому я обновил все свои пакеты
Andre Kraemer
4

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

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

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

Я закончил тем, что сделал это:

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

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

Александр Хамон
источник
4

Перезагрузите Windows.

Это единственное решение, которое сработало для меня после попытки перестроить, удалить содержимое binи перестроить, перезапустить Visual Studio.

Это еще один пример того, насколько ужасны инструменты сборки C # / .NET.

Я думаю (после прочтения многих ответов) общий вывод заключается в том, что причина и решение этой проблемы в значительной степени зависит от настройки и проекта, поэтому, если один ответ не работает, попробуйте другой. Попробуйте неинтрузивные / разрушительные решения, такие как перезапуск Visual Studio, перезагрузка, перестройка и т. Д., ПЕРВЫЙ, прежде чем связываться с пакетами NuGet или переустановить инструменты разработки. Удачи!

(ПРИМЕЧАНИЕ. При использовании Visual Studio 2019 файл проекта изначально создавался в Visual Studio 2015. Может быть, это поможет кому-то разобраться в проблеме)

(РЕДАКТИРОВАТЬ: Может ли это быть вызвано не перезагрузкой после установки / изменения установки Visual Studio или обновления Visual Studio, когда программа установки предложит перезагрузить компьютер?)

Флориан Зима
источник
3

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

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

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