Не вдалося знайти частину шляху… bin \ roslyn \ csc.exe


811

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

Але я отримую таку помилку в браузері:

Не вдалося знайти частину шляху "C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe".

Ось повний скріншот сторінки помилок.

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

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


10
Хто-небудь може пояснити, чому це потрібно в рамках запуску складеного додатку ASP.NET? Для чого це використовується csc.exe?
gregmac

1
Я думаю, це пояснює участь рослін: blogs.msdn.microsoft.com/webdev/2014/05/12/…
andy250

4
папка Рослін не отримувала копіювання у папку бін, я її виправив, встановивши нижче Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Abdullah Tahan

12
Перевстановлення Microsoft.CodeDom.Providers.DotNetCompilerPlatform вирішило мою проблему.
SurenSaluka

4
У мене це було після відкриття мого проекту в VS 2019. Раніше він працював над VS 2017. Я виявив, що просто понизивши Microsoft.CodeDom.Providers.DotNetCompilerPlatform до будь-якої попередньої версії, тоді повернувшись до останньої версії, вирішив проблему. Він виправив деякі проблеми у моєму .csprojфайлі.
Нео

Відповіді:


435

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

9
Це не вирішує мою проблему. Тепер я отримую "Не вдалося знайти файл" C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe " . Зауважте, що коли я створюю новий проект MVC у VS2015, я не бачу згаданої конфігурації у .csproj, і вона працює чудово у браузері
Eyad

4
Дякую. Тепер я можу створити та запустити проект у браузері після завантаження каталогу Roslyn та розміщення його у папці / bin. Я не поставив згадуваний вище PstBuildEvent, і він все ще працює. Можливо, ви хочете відредагувати свою відповідь вище та згадати про необхідність ручного розміщення файлів Roslyn та кращого відображення рішення.
Ейяд

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

1160

TL; ДОКТОР

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

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 і переконався, що шляхи до пакетів є правильними (у моєму випадку .. \ .. \ пакети \ *. *) Всередині тегів <ImportProject>зверху та <Target>з назвою "EnsureNuGetPackageBuildImports" внизу. Це на MVC 5 та .NET Framework 4.5.2.


11
Це була моя проблема - папка bin / roslyn є там, коли проект створюється, однак, якщо ви видалите його, або, як і джерело управління, він не скопіюється, він не буде відновлений. Думаю, що з версіями є проблема "синхронізації". Після встановлення 1.0.1 та оновлення файлу "Імпорт у програмі" на правильну версію, збірка автоматично копіює папку "Рослін" - не потрібно жодної з цих публікацій будувати команди.
Єстер

16
Я майже впевнений, що це найкраще рішення ... спробую це сам з оновленням-пакетом -встановити -іменометрією myprojectname
cr1pto

5
Зробивши все це, для мого проекту нічого не змінилося. Папка для сміття все ще сплющена.
бріанарій

8
Одне зауваження: версія 1.0.3 пакета Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget працює для мене, але версія 1.0.6 викликає помилку в цьому питанні.
Даніель Ніл


176

Ваша збірка намагається знайти, \bin\roslyn\csc.exeоскільки наступні пакети були додані до вашого проекту. Просто перегляньте свій packages.configфайл, ви можете мати їх обоє там

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

Що таке Roslyn і хто додав їх (пакети) у проект: Якщо ви використовуєте .net Framework 4.5.2 для створення проектів за допомогою VS2015, ви, можливо, помітили, що шаблони проектів використовують Roslyn за замовчуванням. Насправді Рослін є одним із компіляторів з відкритим кодом для мов .NET від Microsoft.

Чому ми повинні видаляти Roslyn: Якщо у вашому проекті є посилання на Roslyn, і ви зацікавлені розгорнути його на жодному сервері, ви отримаєте небажані помилки на веб-сайті, оскільки багато хостинг-провайдерів досі не оновили свої сервери і, отже, не підтримують Roslyn. Щоб вирішити цю проблему, вам потрібно буде видалити компілятор Roslyn із шаблону проекту.

якщо ви не зацікавлені в користуванні Roslyn, виконайте наведені нижче дії, щоб видалити його

1. Видаліть пакети NuGet, використовуйте наступні команди з консолі Nuget Package

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 чому це майбутнє? Я просто думаю, що це має бути невимушеним у використанні, але, схоже, багато людей мають проблеми з цим.
Еліссон

1
@Alisson - Рослін - це напрямок, в якому рухаються справи. Він містить новіші мовні функції, більш ефективний, крос-платформний та відкритий. Він з'явився після інших інструментів - отже, майбутнього. Ніщо не говорить про те, що вам потрібно використовувати його, більшість оновлень вимагають певних витрат. Дивіться "Чому компіляція Roslyn в ASP.NET?" розділ: blogs.msdn.microsoft.com/webdev/2014/05/12/…
cchamberlain

1
якщо ви хочете опублікувати MVC-проект для спільного розміщення Windows GoDaddy, це відповідь. GoDaddy не запускає такі файли, як csc.exe
Jeson Martajaya

140

Для мене працювали чисті та відбудови!


4
Я не думаю, що чисте потрібно. Відповідно до цього обговорення питання, відновлення, а не регулярна збірка, завжди поверне файл росліну назад. github.com/dotnet/roslyn/isissue/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. Нарешті, збірка> Batch Build ...> Rebuild Усі зробили свою справу. Це, мабуть, прошепотіло просто правильне солодке - нічого, щоб отримати 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>

Але я помічаю, що файли рослін також є в моєму каталозі бін (а не в папці). Додаток, здається, працює.


4
Ви можете розмістити його будь-де у вашому файлі .csproj на тому ж рівні, що й інший тег <Target>. Зазвичай я кладу це на дно.
Роб Кеннон

Це дійсно має бути прийнятою відповіддю. Ви можете перевірити це в джерелі, і наступний бідний шматок, який тягне вашу репо, не повинен буде проходити через ту ж проблему.
Андрій Ясний

37

Як зазначається в випуску проекту Roslyn на GitHub , рішенням (яке працювало на мене) є просто розвантажити та перезавантажити проект у Visual Studio.

Папка "bin \ roslyn" не була створена під час збирання чи відновлення, поки я не перезавантажив проект.


Дякую, це працювало на мене. Випуск у сховищі dotnet був відкритий у 2016 році, і у нас все ще є випуск у Visual Studio 2019. Я не можу повірити, що це реально!
Феліпе Оріані

26

Я дотримувався цих кроків, і це працювало чудово

  • Видаліть усі папки bin та obj
  • Очистіть розчин і відновіть
  • Виконайте цю команду в powerhell

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


22

Спробувавши всі виправлення без сигари, я виправив це, оновивши цей пакунок Nuget у Visual Studios:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Міна була від 1.0.0 до 2.0.0 для довідки (помилка більше не відображається)


3
Це було для мене як вел. Навіть 2.0.0 був занадто низьким для мого проекту, він вимагав 2.0.1.
yesman

3
Це вирішило це для мене. Я погіршив ситуацію, яка, можливо, виправила проблему, а потім оновилася до останнього.
Даніель Джексон

1
Я теж це робив. Тепер roslynпапка створена у моєму вихідному шляху. Я також не бачу посилання на "рослін" у своєму csproj. Це може бути , що Target Name="CopyRoslyn...це VS2015 річ , і немає необхідності в (версія) 2017 у мене є. Варто зазначити: Оскільки я оновив DotnetCompilerPlatform, перш ніж я грав, додаючи ціль копіювання (ту, яку я згадав), у мене є чистіший csproj.
ЛосМанос

1
Цей зі мною щойно трапився. Ця посада - рятівник. У мене є те саме повідомлення про помилку неодноразово, і це завжди здається зовсім іншою причиною!
Брайан

19
  1. Чистий розчин
  2. Відновлення рішення, ці два кроки працювали для мене.

Дякую, це працювало і для мене.
Joey Phillips

1
Працює. Я випадково натиснув, Ctrl Cколи я опинився в середині перевірки гілки, gitі це накрутило мою репо. git reset --hardне вийшло, тому мені git clean -xdfдовелося відновити проект. Однак я зіткнувся з цією помилкою, тому просто очистив і відновив проект знову, і він працював на мене.
Пол Карлтон

15

NuGet Package Manager

Вам потрібно встановити Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, був спеціально створений для цієї помилки


Це не спрацювало - я підозрюю, що пакет насправді не є точно такою метою.
Дрю Міллер

Я тестував VS 2017, і він працює чудово, це може бути проблемою з іншими версіями.
Хуан Акоста

11
Я не встановлюю випадкові пакети від випадкової особи з "dsx" як псевдонім. Це велика безпека ні ...
Матеуш

1
@ Матеуш або той, що виправив би мою структуру папок non-APS.NET [sic]
Eliasar

14
  • Клацніть правою кнопкою миші на вашому проекті та виберіть Manage Nuget Packages
  • Знайти "Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
  • Просто оновіть на старішу чи новішу версію (не важливо, яка), а потім знову оновіть її до початкової версії.

Це повторно встановлює всі залежності та файли пакету (наприклад, csc.exe)

Nuget - DotNetCompilerPlatform


Це зафіксувало це для мене! Дякую!
Мейсон

11

Отже, відповідь Роб Кеннона по суті спрацювала для мене, але мені довелося підправити кілька варіантів. Зокрема, мені довелося видалити умову в цілі, а також змінити атрибут Включити, оскільки $ 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>

1
Поведінка ще гірша. Місцево, якщо ви перейдете до папки пакунків і видалите дві папки Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.nn і побудуєте код, тоді $ CscToolPath буде порожнім. Якщо ви будуєте вдруге, то він не буде порожнім. Проблема постійно виникає на вашому сервері збірки, оскільки вона завжди розглядається як "перша збірка". Ваш код працює чудово, але якщо ви оновите пакет Microsoft.Net.Compilers , вам доведеться оновити .csproj . Дякую.
Жульєн Д.

3
Зауважте, що це рішення не вдасться (або має бути відрегульовано), якщо версія Microsoft.Net.Compilers зміниться.
JanDotNet

Я оновив Microsoft.CodeDom.Providers.DotNetCompilerPlatform, а потім зміг продовжити роботу.
iowatiger08

10

Для мене працювали оновлення пакунків, клацніть правою кнопкою миші рішення> Керуйте пакетами NuGet для вирішення та оновіть всі пакунки, а також спеціально: Microsoft.Net.Compilers та Microsoft.CodeDom.Providers.DotNetCompilerPlatform


Цього разу для мене це спрацювало. Відсутність помилки Roslyn / csc.exe для мене постійно виникає, і рішення досить часто буває різним ...
Брайан

10

Це відома проблема з Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6. Пониження рівня до 1.0.5 зафіксувало це для мене.


Це правильно. Я зіткнувся з цим випуском з версією 1.0.6 лише при публікації в Azure. Пониження рівня до 1,0,5 робіт
Аугусто Баррето

Знизився з 2.0.0 до 1.0.5 і спрацював. Однак я їв бутерброд з індичкою в той час, який, ймовірно, частково відповідав за рішення. Піди розберися.
barneymc


9

За коментарем Даніеля Ніла вище:

версія 1.0.3 пакета Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget працює для мене, але версія 1.0.6 викликає помилку в цьому питанні

Пониження рівня до 1.0.3 вирішило цю проблему для мене.



@akatakritos це допомогло. Я годинами шукав. дякую обом.
erincerol

2
1.0.7 все ще впливає на певні сценарії github.com/aspnet/RoslynCodeDomProvider/isissue/17
altso

1
1.0.5 - це остання версія, яка працювала для мене (1.0.6 та 1.0.7 генерують помилку)
Патрік,

Те саме, я був 1.0.7, і це не працюватиме. 1.0.3 робіт. Я не пробував нічого вищого, так як останній час свого життя я просто витрачав цю проблему, і більше не псуюся з цим, тепер це працює!
Філіп Стратфорд

9

У моєму випадку у мене виникли проблеми в Дженкінсі, коли він намагався розгорнути його в восьминога з наступною помилкою:

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.Compilersget додає його автоматично.

Рішення

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

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

І вибрав компілятор C # 7 у Дженкінсі замість C # 6 та відновив це, щоб забезпечити, щоб все працювало та будувалося правильно.

Нарешті, у своїй основній програмі я спробував оновити свій внутрішній компонент. І все, ніж будувати заново. Він побудований без жодних проблем чи проблем.


8

У моєму випадку мені просто потрібно було перейти до каталогу бін у Visual Studio Solution Explorer (проект веб-додатків) і безпосередньо включити проект рослін. Клацнувши правою кнопкою миші папку та вибравши Включити у проект. І ще раз перевірте рішення, щоб запустити процес збирання.

Папка Рослін за замовчуванням не була включена.


7

Оновлення Microsoft.CodeDom.Providers.DotNetCompilerPlatformз 1.0.0 до 1.0.1 зафіксувало це для мене.


6

Відкрийте файл проекту та видаліть усі посилання за допомогою Import Project = ".. \ пакети \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....

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


6

Як вже було зазначено /programming/32780315#34391473 , швидке виправлення використовувати менеджер пакетів, Tools> Nuget Package Manager> Package Manager Console, щоб запустити

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

Консоль менеджера пакетів - як відкрити

Але альтернативне рішення (яке автоматично і безшумно відтворює ваші пакунки, якщо вони відсутні) - це видалити атрибут 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 / огляд / розширений / call-a-web-api-from-a-net-client / sample / server / ProductsApp )

помилка серверу


6

У моєму випадку просто видаливши все, що знаходиться у папці бін, і перекомпілювавшись для мене всю роботу.


2
Я думаю, що це більш просто і ефективно. Зазвичай я отримую цю помилку після клонування проекту з репозиторію в новий обчислювач.
Джонатан Ортега

Спробувавши це, я отримав 403 Заборонено від IIS Express під час роботи в налагоджувачі. Перезавантаження Visual Studio теж не допомогло, але перезавантаження Windows зробило.
Флоріан Зима

6

У мене також було те саме питання під час запуску проекту. Ось кроки, які я виконував.

  1. Клацніть правою кнопкою миші в рішенні
  2. виберіть Чистий розчин
  3. Після того як чисті вдалося, знову побудуйте свій проект
  4. Запустіть проект ще раз

Цього разу я не бачив тієї самої помилки. Це працює як очікувалося.


Колеги повідомили, що оновлення пакета NuGet з консолі працює, але це також працює без виконання жодної команди. Моя обрана відповідь.
цемер

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


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" /> з файлу пакети.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 у вашому провіднику рішень і знову складіть рішення. Це вирішило б проблему


Дякую! Це теж працювало для мене. На додаток до цього я оновив усі свої пакунки
Андре

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. Можливо, це допомагає комусь розслідувати проблему)

(EDIT: Чи може це бути викликано не перезавантаженням після встановлення / зміни установки Visual Studio або оновленням Visual Studio, коли інсталятор запропонує перезавантажити?)


3

У мене веб-проект без файлу csproj і рішення тут, і тут мені не працювали.

Зміна цільової .NET фреймворку, перевстановлення пакетів ( Update-Package -reinstall) та потім складання проекту працювали для мене. Ви навіть можете змінити цільовий фреймворк після цієї операції (змусити знову встановити нульові пакети після цього).


Це "проект веб-сайту". Я скористався цією командою, щоб просто встановити один пакет:update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall
GarDavis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.