Не удалось найти часть пути ... binroslyncsc.исполняемый
Я пытаюсь запустить Asp.net проект MVC, полученный из системы управления версиями TFS. Я добавил Все ссылки на сборку, и я могу успешно создавать и компилировать без каких-либо ошибок или предупреждений.
но я получаю следующую ошибку в браузере:
не удалось найти часть пути 'C:B8akWorkspaceB8akProjectB8akSolutionB8AK.Порталbinroslyncsc.exe.
вот полный скриншот ошибки страница.
после нескольких дней исследований, я понял, что Рослин платформа компилятора .Net, которая предлагает функции предварительной компиляции. Однако я не понимаю, почему моя сборка пытается найти binroslyncsc.exe, потому что я не настраивал ничего, связанного с Roslyn, и я не собираюсь использовать Roslyn в своем проекте.
30 ответов
проблема с шаблонами 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>
В моем случае решением было переустановить/обновить пакеты NuGet:
- Microsoft.Сеть.Компиляторы 1.1.1
- Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform 1.0.1
затем я заглянул .csproj и убедился, что пути к пакетам верны (в моем случае ..\..\пакеты.*\*) внутри тегов <ImportProject>
сверху и в <Target>
С именем "EnsureNuGetPackageBuildImports"внизу. Это на MVC 5 и .NET Framework 4.5.2.
короткий ответ-запустите это в консоли диспетчера пакетов:
PM > update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
ваша сборка пытается найти \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 из шаблона проекта.
если вы не заинтересованы в с помощью Roslyn, следуйте инструкциям ниже, чтобы удалить его
1. Удалите пакеты Nuget, используйте следующие команды из консоли пакета Nuget
PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers
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>
<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=\"Web\" /optionInfer+"></compiler>
</compilers>
</system.codedom>
вот более 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 (не в папке). Приложение, похоже, работает.
чистый и перестроить работал для меня!
Edit: комментаторы говорят, что чистый шаг не нужен. Ты можешь просто перестроиться.
и ответ Роба Кэннона по существу работал для меня, но мне пришлось настроить несколько вариантов. В частности, мне пришлось удалить условие на цели, а также изменить атрибут 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>
за комментарий Даниэля Нила выше:
версия 1.0.3 Microsoft.граф CodeDOM.Услуги поставщиков.Пакет DotNetCompilerPlatform Nuget работает для меня, но версия 1.0.6 вызывает ошибку в этом вопросе
понижение до 1.0.3 решило эту проблему для меня.
Это известная проблема С Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform 1.0.6. Понижение до 1.0.5 исправило это для меня.
в моем случае мне просто нужно было перейти в каталог bin в Visual Studio Solution Explorer (проект веб-приложения) и включить проект roslyn напрямую. Щелкнув правой кнопкой мыши папку и выбрав включить в проект. И снова проверьте решение, чтобы запустить процесс сборки.
папка roslyn не была включена по умолчанию.
открыть файл проекта и удалить все ссылки с проектом импорта="..\пакеты\Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform.1.0.0....
открыть web.config и удалить все системы.атрибуты компиляторов codedom
обновление пакетов nuget работало для меня Щелкните правой кнопкой мыши решение > Управление пакетами NuGet для решения и обновите все пакеты и специально: Microsoft.Сеть.Компиляторы и Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform
в моем случае у меня была проблема в Дженкинсе, когда он пытался развернуть его в осьминоге со следующей ошибкой:
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\workDirba9f2e0d5e4022\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\workDirba9f2e0d5e4022\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\workDirba9f2e0d5e4022\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\workDirba9f2e0d5e4022\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#: throw недопустимое выражение compilation) и был решен таким образом (как использовать 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 и rebuild, это должно гарантировать, что все работает и строится правильно.
чем наконец в моей основной программе я пытался обновите мой внутренний компонент. И все, чем построишь заново. Он построен без каких-либо проблем или проблем.
Если вы добавляли ASPNETCOMPILER для компиляции представлений Razor в MVC, как в этот вопрос StackOverflow, затем измените PhysicalPath на место, где находится пакет Roslyn nuget (обычно указывается через $CscToolPath переменной):
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />
проблема с шаблонами VS2015 по умолчанию заключается в том, что компилятор фактически не копируется в
Обновление Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform от 1.0.0 до 1.0.1 исправил это для меня.
Введите описание изображения здесь
вам необходимо установить Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform.BinFix, был специально создан для этой ошибки
в моем случае, подобно Basim, был пакет NuGet, который говорил компилятору, что нам нужен C# 6, чего мы не делали.
нам пришлось удалить пакет NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatform
, который затем удаляют:
-
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
от пакеты.файл 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=\"Web\" /optionInfer+" /> </compilers> </system.codedom>
на system.codedom
узел, вы можете понять, почему он приносил в roslyn:compilerOptions="/langversion:6
добавить 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>
у меня была такая же проблема при установке приложения на сервере, когда все прекрасно работало на localhost.
ни одно из этих решений woorked, у меня всегда была одна и та же ошибка:
Could not find a part of the path 'C:\inetpub\wwwroot\myApp\bin\roslyn\csc.exe'
Я закончил тем, что сделал это:
- в моем проекте установки, правый clic, view > file system
- создать
bin/roslyn
папку - выберите Добавить > файлы и добавьте все файлы из
packages\Microsoft.Net.Compilers.1.3.2\tools
это решило мой проблема.
У меня также была такая же проблема при запуске проекта. вот шаги, которым я следовал.
- щелкните правой кнопкой мыши в решении
- выберите Очистить решение
- после того, как clean удалось, снова создайте свой проект
-
запустите проект еще раз
на этот раз я не вижу той же ошибки . Это работает, как ожидалось
после попытки всех исправлений без сигары я исправил его, обновив этот пакет Nuget в Visual Studios:
Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform
мой был от 1.0.0 до 2.0.0 для справки (ошибка больше не отображается)
Я столкнулся с этой проблемой после обновления некоторых пакетов через NuGet. Перестроение (вместо обычной сборки) сработало для меня.
У меня была такая же проблема после обновления DotNetCompilerPlatform. Решено путем перезапуска Visual Studio > чистый проект > проект сборки.
мое решение использует Nuget для обновления ниже элементов до последней версии: - Майкрософт.Чистая.Составители - Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform Затем перестроили проект. Поскольку мой проект является веб-сайтом, поэтому нет *.файл csproj. Выше сообщение об ошибке появляется, когда я пытался просмотреть cshtml в браузере.
ошибка исправлена после того, как два элемента выше обновлены до последней версии. Я нахожусь в VS2015 и windows7 SP1
кроме удаления директории Bin из всех проектов внутри решения, удалите также папки obj.
в главном решении diretory удалите папку .vs
работал для меня при попытке привести уже сделанный проект в пустое решение, созданное на git.
У меня есть webproject без файла csproj, и решения, упомянутые здесь, не работали для меня.
изменение целевой платформы .NET framework, переустановка пакетов (Update-Package -reinstall
), а затем строительство проекта сработало для меня. Вы даже можете изменить целевую структуру после этой операции (сделайте так, чтобы вы переустановили пакеты nuget снова после этого).
вопрос
имейте в виду, что NuGet PM нарушает поведение Розалин. Нажмите Tools > NuGet Package Manager > Manage NuGet Packages for Solution
Если обновление существует для Microsoft.CodeDom.Providers.DotNetCompilerPlatform
, Microsoft.Net.Compilers
или Microsoft.Net.Compilers.netcore
, обновите их, и решение сломается! Это происходит потому, что шаблоны сайтов ASP настроены на использование определенных версий при создании проекта. Чтобы увидеть проблему, нажмите кнопку Показать все файлы в обозревателе решений.
исправить
при создании проекта $(WebProjectOutputDir)\bin
не существует, поэтому, когда Розалин добавляется как зависимость от NuGet он устанавливает его правильно. После обновления пакетов решений . Теперь вы можете обновить страницу, и сайт загрузится.
мне пришлось изменить файлы проектов WebAPI и MVC, чтобы не создавать представления:
<MvcBuildViews>false</MvcBuildViews>
это разрешило мою ошибку сервера сборки TFS 2015 с roslyn. Все еще не уверен, почему csc.exe был скопирован в \bin\csc.exe, но процесс публикации искал \bin\Roslyn\csc.исполняемый...не смог найти трансформацию, вызвавшую это несоответствие.
Я испытал эту ошибку на сервере сборки Jenkins под управлением MSBuild, который выводит файлы сборки в отдельную папку (_PublishedWebsites). Точно так же - папка roslyn не была в каталоге bin, и все файлы roslyn были объединены с файлами bin.
@igor-semin ' s answer было единственное, что работало для меня (поскольку я использую языковые функции C# 6, я не могу просто удалить пакеты nuget согласно другим ответам), но как Я также запускаю CodeAnalysis, я получал еще одну ошибку на моем целевом сервере развертывания:
для типа Microsoft была обнаружена попытка переопределить существующее сопоставление.CodeAnalysis.ICompilationUnitSyntax с именем"", в настоящее время сопоставляется с типом Microsoft.CodeAnalysis.Используется CSharp.Синтаксис.CompilationUnitSyntax, чтобы ввести Microsoft.CodeAnalysis.На языке VisualBasic.Синтаксис.CompilationUnitSyntax.
причина этого в том, что, поскольку файлы roslyn сбрасываются в основной каталог bin, когда вы запускаете xcopy, чтобы воссоздать их во вложенной папке roslyn, теперь у вас есть 2 копии этих файлов, которые компилируются, и между ними происходит столкновение. После большого разочарования я решил "взломать" исправление-дополнительную задачу после сборки, чтобы удалить эти файлы из каталога bin, удалив конфликт.
The .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>
................... здесь больше ......................