Это проект WebApi, использующий VS2015.
Шаг для воспроизведения:
- Создать пустой проект WebApi
- Измените путь вывода Build с «bin \» на «bin \ Debug \»
- Бегать
Все работает отлично, пока я не изменил путь вывода сборки с "bin \" на "bin \ Debug \". На самом деле, любой путь вывода, кроме "bin \", работать не будет.
Еще одна небольшая дополнительная вещь заключается в том, что наличие другого выходного пути в любое место будет работать, пока я оставляю сборку в «bin \».
Пожалуйста, помогите решить проблему. Я предполагаю, что это будет стоить проблемы при фактическом развертывании.
c#
asp.net
asp.net-web-api
msbuild
cscmh99
источник
источник
Ответы:
Если в вашем проекте есть ссылки на Roslyn, и вы развертываете его на сервере IIS , вы можете получить нежелательные ошибки на веб-сайте, поскольку многие провайдеры хостинга все еще не обновили свои серверы и, следовательно, не поддерживают Roslyn.
Чтобы решить эту проблему, вам нужно удалить компилятор Roslyn из шаблона проекта . Удаление Roslyn не должно влиять на функциональность вашего кода. Он работал нормально для меня и некоторых других проектов (C # 4.5.2), над которыми я работал.
Сделайте следующие шаги:
Удалите из следующих пакетов Nuget с помощью командной строки, показанной ниже ( или вы можете использовать графический интерфейс диспетчера пакетов Nuget, щелкнув правой кнопкой мыши на Root Project Solution и удалив их ).
Удалите следующий код из файла Web.Config и перезапустите IIS . ( Используйте этот метод, только если шаг 1 не решит вашу проблему. )
источник
'Enabling the .NET Compiler Platform.
У меня та же проблема. Видимо компилятор .NET не был загружен в
GAC
. Что я сделал, чтобы решить это было:Сначала в консоли диспетчера пакетов введите:
Теперь по какой-то причине милые джентльмены из Microsoft решили не устанавливать его в GAC для нас. Вы можете сделать это вручную, открыв Командную строку разработчика и введя:
Вывод
Microsoft старается побудить всех делать все с помощью Nuget, что может быть хорошо без случайных ошибок, с которыми вы сталкиваетесь в системе Nuget. Попробуйте использовать один и тот же проект в разных решениях, случайно (или нет) обновить один из множества нюгетов, которые он использует для одного из них, и, если вам не повезет, вы поймете, что я имею в виду, когда попытаетесь построить другое решение. С другой стороны, размещение файлов в GAC также может вызвать проблемы в будущем, поскольку люди, как правило, забывают, что они там помещают, а затем при настройке новых сред они забывают включить эти файлы. Другое возможное решение - поместить файлы в центральную папку для сторонних библиотек DLL (даже если странно называть компилятор сторонним), что создает проблемы с неработающими ссылками при настройке новых сред. Если вы решите установить DLL в GAC, будьте осторожны и помните, что вы так и сделали. Если вы этого не сделаете, загрузите nuget для каждого проекта еще раз и несите все досадные ошибки, вызванные им (по крайней мере, раньше случалось, когда мне это надоело, и я просто помещал файлы в GAC). Оба подхода могут вызвать у вас головную боль и создать проблемы, это просто вопрос о том, какие проблемы вы предпочитаете решать. Microsoft рекомендует использовать систему nuget, и, как правило, лучше слушать их, чем неизвестного программиста в SO, если вы не устали от системы nuget и не привыкли иметь дело с GAC достаточно долго, чтобы она стала лучшей альтернативой для тебя. загрузите nuget для каждого проекта еще раз и несите все раздражающие ошибки, вызванные им (по крайней мере, раньше случалось, когда мне это надоело, и я просто помещал файлы в GAC). Оба подхода могут вызвать у вас головную боль и создать проблемы, это просто вопрос о том, какие проблемы вы предпочитаете решать. Microsoft рекомендует использовать систему nuget, и, как правило, лучше слушать их, чем неизвестного программиста в SO, если вы не устали от системы nuget и не привыкли иметь дело с GAC достаточно долго, чтобы она стала лучшей альтернативой для тебя. загрузите nuget для каждого проекта еще раз и несите все раздражающие ошибки, вызванные им (по крайней мере, раньше случалось, когда мне это надоело, и я просто помещал файлы в GAC). Оба подхода могут вызвать у вас головную боль и создать проблемы, это просто вопрос о том, какие проблемы вы предпочитаете решать. Microsoft рекомендует использовать систему nuget, и, как правило, лучше слушать их, чем неизвестного программиста в SO, если вы не устали от системы nuget и не привыкли иметь дело с GAC достаточно долго, чтобы она стала лучшей альтернативой для тебя.
источник
Просто добавьте следующий пакет nuget в свой проект
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
.Была такая же проблема.
источник
У меня та же проблема, что мое приложение работало в Vs2013, но получало ошибку после обновления до Vs2015.
источник
Я знаю, что это старая ветка, но я бы хотел указать на возможную проблему версии DotNetCompilerPlatform.dll, f. ех. после обновления. Пожалуйста, проверьте, отличается ли новый сгенерированный файл Web.config от вашего выпущенного файла web.config, в частности части system.codedom. В моем случае это было изменение версии с 1.0.7 до 1.0.8. Новая dll уже была скопирована на сервер, но я не изменил старый web.config (с некоторыми специальными настройками сервера):
После обновления двух строк ошибка исчезла.
источник
2.0.0
до2.0.1
В соответствии с вашими действиями по воспроизведению, я предположил, что изменение пути вывода в свойстве приложения было вашим единственным изменением после создания приложения. Единственное, что делает это изменение, - это говорит Visual Studio поместить выходные сборки MSBuild в новую папку. Однако во время выполнения ASP.Net не догадывается, что он должен загружать сборки из этой новой папки, а не из папки \ bin.
Этот ответ показывает, как изменить выходной каталог сборки приложения WebApi. Чтобы получить ту же ошибку, что и в этом посте, вам нужно закомментировать весь раздел <system.codedom> в web.config. И тогда вы можете следовать инструкциям, чтобы изменить выходной путь.
После того, как вы получите работу приложения, вы можете раскомментировать раздел <system.codedom>. Если вы вообще не используете новый синтаксис C # 6 в своем приложении, вы можете удалить Microsoft.CodeDom.Providers.DotNetCompilerPlatform из вашего приложения; в противном случае вы можете добавить следующую командную строку в событие после сборки,
Новый провайдер CodeDom всегда ищет папку «\ roslyn» в \ bin. Приведенная выше команда работает в качестве обходного пути и копирует папку \ roslyn из новой папки вывода в \ bin.
В моих экспериментах инструмент публикации Visual Studio, однако, публиковал выходные сборки в папке \ bin в месте развертывания независимо от настроек пути вывода. Я предполагаю, что ваше приложение все еще должно работать в реальном развертывании.
источник
Простой способ - Project> Управление пакетами NuGet ...> Обзор (вкладка)> в поиске введите следующее: Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Вы можете установить или обновить или удалить и установить этот компилятор
источник
Другое возможное решение:
источник
Он остановился после публикации на рабочем сервере. Причина , по которой он показал мне эту ошибку потому , что он был развернут в суб папке. В IIS я нажал прямо на подпапку и извинился «Преобразовать в приложение», и после этого все заработало.
источник
В моем случае это произошло, когда я изменил разрешение для папки приложения и учетная запись IIS_IUSRS была удалена. После того, как я повторно добавил IIS_IUSRS (IIS Manager-> YourWebApp -> Редактировать разрешение -> Добавить IIS_IUSRS) в папку приложения, оно заработало.
источник
Вот как я решил это:
bin
папку в каталоге проекта.Build Solution
. В VS2017 (Запуск от имени администратора)> Построить> Построить решение .источник
Если вы используете git, вы, вероятно, игнорируете .dll в коммите
источник
У меня было несколько проектов в решении, и веб-проект (проблема, приводящая к этой ошибке) не был установлен как проект запуска. Я установил этот веб-проект как проект автозагрузки и щелкнул пункт меню «Отладка» -> «Начать отладку», и он заработал. Я прекратил отладку, а затем попробовал снова, и теперь он снова работает. Weird.
источник
Тогда проблема вернулась. Я удалил как
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
и ,Uninstall-package Microsoft.Net.Compilers
но никакой помощи. Потом установил - не поможет. Очистили проект и построили без помощи. Перезапуск сервера не помог. Потом я заметил, что проекту нужен не самый последний, который в настоящее время 1.0.5, а 1.0.3, так как в этом случае ошибка не могла загрузить версию 1.0.3. Поэтому я установил эту версию DLL, и теперь она работает.источник
ASP.NET не выполняет поиск
bin/debug
или какую-либо подпапку в bin для сборок, как это делают другие типы приложений. Вы можете указать среде выполнения искать в другом месте, используя следующую конфигурацию:источник
Вам следует обновить пакеты «Microsoft.CodeDom.Providers.DotNetCompilerPlatform» и «Microsoft.Net.Compilers» в вашем проекте.
источник
В моем случае, я получил ошибку, когда у меня было веб-приложение в 4.5.2 и ссылочные библиотеки классов в 4.6.1. Когда я обновил веб-приложение до версии 4.5.2, ошибка исчезла.
источник
Я получил эту ошибку, потому что мой пользователь пула приложений был установлен на ApplicationPoolIdentity. Я изменил его на учетную запись пользователя / службы, которая имеет доступ к папке, и ошибка исчезла.
источник
Вот мои выводы. Я также столкнулся с этой проблемой сегодня утром. Я просто добавил своего текущего пользователя в пул приложений, в котором выполнялось приложение.
шаги:
Откройте IIS
Нажмите на пул приложений
Выберите пул приложений, в котором вы получаете проблему
Правый клик -> дополнительные настройки
Нажмите на значок в три точки рядом с изображением
Теперь выберите свой аккаунт
Дайте вашему компьютеру имя пользователя и пароль
Сохранить
Обновите ваше приложение .. и оно начнет работать. Была некоторая проблема безопасности для доступа к dll.
источник
просто удалите пакет из консоли диспетчера пакетов из команды ниже
PM> Удалить пакет Microsoft.CodeDom.Providers.DotNetCompilerPlatform.
PM> Удалить пакет Microsoft.Net.Compilers
а затем установить его снова из диспетчера нюгетеров
источник
Если вы недавно установили или обновили
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
пакет, дважды проверьте, что версии этого пакета, на которые есть ссылки в вашем проекте, указывают на правильную и ту же версию этого пакета:В
ProjectName.csproj
, убедитесь , что<Import>
тег дляMicrosoft.CodeDom.Providers.DotNetCompilerPlatform
присутствует и указывает на правильную версию.В
ProjectName.csproj
, убедитесь , что<Reference>
тег дляMicrosoft.CodeDom.Providers.DotNetCompilerPlatform
присутствует, и указывает на правильную версию, как вInclude
атрибуте и ребенка<HintPath>
.В этом проекте
web.config
убедитесь, что<system.codedom>
тег присутствует и его дочерние<compiler>
теги имеют одинаковую версию в своемtype
атрибуте.По какой - то причине, в моем случае обновление этого пакета от 1.0.5 до 1.0.8 вызвало
<Reference>
тег в.csproj
иметь свойInclude
указывающий на старую версию 1.0. 5 .0 (которые я удалил после обновления пакета), но все остальное указывало на новую и правильную версию 1.0. 8 .0.источник
Убедитесь, что ваш проект полностью построен!
Нажмите на вкладку «Вывод» и убедитесь, что у вас нет что-то вроде:
И открой свой
bin
папку и проверьте, не устарела ли она.У меня была целая куча ошибок машинописного текста, которые я сначала игнорировал, забывая, что они ломали сборку и приводили к тому, что не было скопированных DLL.
источник
Добавьте ссылку на сборку CppCodeProvider.
источник
В моем случае мой веб-проект не был загружен должным образом (он показывал проект, недоступный), затем я должен был перезагрузить свой веб-проект после открытия моей визуальной студии в режиме администратора, тогда все работало нормально.
источник
У меня была та же самая проблема, и это было потому, что я переместил местоположение проекта и просто нуждался в воссоздании виртуального каталога.
источник
Исключение, с которым мы столкнулись, было не на локальном, а на удаленном сервере, CI Azure считывал его из папки пакетов, но упомянутые выше версии компилятора не были найдены.
Чтобы исправить это, мы изменили файл проекта, чтобы сделать его что-то вроде
Здесь нет ссылок ни на один из пакетов, прямо ссылающихся на переменные окружения.
Это решило проблему, однако в наших случаях мы не используем пакеты напрямую из «package.config», вместо этого у нас есть отдельная папка для обеспечения целостности версий между командами.
источник
Перейдите в inetmgr из команды запуска. В консоли диспетчера IIS выберите папку приложения в разделе «Веб-сайт по умолчанию», щелкните правой кнопкой мыши эту папку, затем «Преобразовать в приложение». Запустите файл .asmx, активировав его. Это решило проблему.
источник
Проверьте,
BIN
загружена ли папка полностью или отсутствует в файлах.источник
По поводу этой ошибки я пробовал:
uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
uninstall-package Microsoft.Net.Compilers
и их установка снова.Хотя все они кажутся правильными решениями, я смог генерировать только новые ошибки, и, в конце концов, ошибка может отображаться, когда отсутствуют определенные ссылки / нюансы.
В моем случае я недавно переустановил Microsoft Office и ссылался на сборки, такие как Microsoft.Office.Core. Новая установка, казалось, не включала требуемые пакеты, что сделало его таким, что мое решение не могло быть построено правильно.
Я смог решить эту проблему, переработав свой код до такой степени, что мне не нужно было ссылаться на Microsoft.Office, но я мог бы решить эту проблему путем поиска необходимых пакетов и соответствующей установки.
Похоже, неясное сообщение об ошибке из Visual Studio.
источник
Если вы работали над проектом, и это только что появилось как ошибка. Перезагрузите свой компьютер (или сервер в моем случае), это решило проблему для меня.
источник