it-swarm.com.ru

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

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

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

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

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

 enter image description here

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

382
Eyad

Проблема с шаблонами 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>
209
Mitchell

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

475
andy250

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

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

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

Почему мы должны удалить Рослин: Если в вашем проекте есть ссылки на 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>
137
Malik Khalil

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

54
Rob Cannon

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

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

48
pipedreambomb

NuGet Package Manager

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

15
Adrian Berca

Итак, ответ Роба Кэннона по сути, работал для меня, но мне пришлось настроить несколько вариантов. В частности, мне пришлось удалить условие на цели, а также изменить атрибут 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>
11
jonnybot

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

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

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

11
josh.thomson

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

9
jrummell

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

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

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

8
Jason Coyne

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

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

8
Martijn van Halen

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

8
hichamkazan

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

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

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

6
Masoud Darvishian

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

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

6
maytham-ɯɐɥʇʎɐɯ

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

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

6
user6326076

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

5
Korayem

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

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

5
Anrijs Vītoliņš

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

5
Ben

В моем случае, как и в 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 вы можете увидеть, почему он вводил roslyn: compilerOptions="/langversion:6

4
Mark C.
  1. Чистый раствор
  2. Перестройте решение, эти два шага сработали для меня.
4
nischa

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

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

3
Miroslav Adamec

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

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

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

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

3
Alexandre Hamon

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

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

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

3
Narendra

Добавьте PropertyGroup в ваш файл .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>
2
Igor Semin

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

2
user1903050

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

1
Helen

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

Ошибка исправлена ​​после обновления двух пунктов выше до последней версии . Я нахожусь в VS2015 и Windows7 SP1

1
Penny

FYI ...

По состоянию на 31.08.2017 обновление до Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.7 уже работает.

1
Prisoner ZERO

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

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

1
Christian Davén

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

1
Uhha

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

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

1
Ogglas

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

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

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

1
Erik Silva

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

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

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

Причина этого заключается в том, что, поскольку файлы roslyn выгружаются в основной каталог bin, когда вы запускаете xcopy, чтобы воссоздать их в вложенной папке roslyn, теперь у вас есть 2 копии этих файлов, которые компилируются, и между ними возникает конфликт , После большого разочарования я решил исправить «hack» - дополнительную задачу после сборки, чтобы удалить эти файлы из каталога 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
Ciaran

Многие из этих ответов касаются пакетов Nuget и/или очистки и перезагрузки вашего проекта.

Если у вас есть сервисные ссылки WCF и недопустимые конечные точки, вы также можете получить это сообщение об ошибке. Убедитесь, что конечные точки указаны правильно, и обновите конфигурацию службы, указав правильную конечную точку в файле .config, а также при настройке ссылки на службу из графического интерфейса.

 Image of Service Reference Configuration GUI

0
GibralterTop

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

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

Ответ для этого по-разному для проекта веб-сайта и веб-приложения Project . Основная проблема та же, что Пакет NuGet ведет себя по-разному на разных компьютерах. Это может быть проблема с правами или какая-то политика выполнения, которая запрещает копирование в папку Bin Как вы знаете, Roslyn - новый компилятор. у вас должно быть это в папке Bin для этих проектов Перейдите на ваш сайт NuGet Packages проверьте эту папку Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0 \code\packages\Microsoft.CodeDom .Providers.DotNetCompilerPlatform.2.0.0 Вы это видите? Можете ли вы увидеть код\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\tools\RoslynLatest в нем Теперь, как часть компиляции, эта папка должна быть скопирована на ваш сайт в bin, как это .\code\WebSite1\Bin\Roslyn немного, как это не происходит для вас . Попробуйте запустить Visual Studio от имени администратора . Скопируйте папку Roslyn вручную . Попробуйте удалить и установить пакет NuGet . Помните, что этот пакет компилирует вашу папку, и если его там нет, вы не можете ничего скомпилировать, и поэтому вы не можете ничего добавить тоже Попробуйте скопировать этот пакет в автономную версиюTools -> options-> Nuget Package Manager-> Source source- > Автономные пакеты Microsoft Visual Studio C:\Program Files (x86)\Microsoft SDKs\NuGetPackages

0
Jin Thakur

У меня была эта ошибка после переименования решения и некоторых включенных проектов, а также игры с удалением пакетов 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
TTT

Я столкнулся с этой проблемой с конвейером публикации (который создает каталог _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
EKW

Вопрос

Имейте в виду, что 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

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

0
eyoung100
  • Щелкните правой кнопкой мыши по своему проекту и выберите «Управление пакетами Nuget».
  • Найти "Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
  • Просто обновите до более старой или более новой версии (неважно, какую), а затем снова обновите до исходной версии.

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

 Nuget - DotNetCompilerPlatform

0
Bojan

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

<MvcBuildViews>false</MvcBuildViews>

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

0
Robert J. Good

В моем случае у меня была эта проблема, когда я работал одновременно с двумя визуальными студиями IDE. Таким образом, решение состояло в том, чтобы очистить проект и закрыть другой экземпляр.

0
Badr Bellaj

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

Удачи всем, кто имеет эту проблему.

0
Juan Martí