Опубликовать сайт без roslyn


93

Я пытаюсь создать веб-приложение с помощью Visual Studio 2015 и .NET 4.5.1. Когда я публикую веб-сайт, Visual Studio создает папку с именем roslyn.

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

Я знаю, что он используется для компиляции кода на лету, но, к сожалению, мой хостинг-провайдер не позволяет мне запускать компилятор на своем сервере.

Как опубликовать сайт без roslyn похожий на предыдущую версию Visual Studio?

РЕДАКТИРОВАТЬ: я получил эту ошибку при попытке получить доступ к моему сайту.

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

Кажется, что IIS пытается выполнить, roslyn\csc.exeно у моей учетной записи нет разрешения на это. В предыдущей версии Visual Studio эта ошибка не появляется.


Кроме того, Roslyn - это просто набор DLL. Хозяин не может знать или заботиться о том, что они делают.
— SLaks

3
@Slaks IIS пытается запустить csc.exe. См. Редактировать.
— Niyoko

Если вы используете Plesk, вы можете отключить «Выделенный пул приложений IIS для своих сайтов», тогда вам даже не нужно удалять эти пакеты!
— Вахид Амири

Ответы:


184

Я только что столкнулся с той же проблемой. Когда вы создаете новый веб-проект, в ваш проект автоматически добавляются два пакета nuget. Если вы удалите их, ваша проблема должна быть решена. Имена пакетов: « Microsoft.CodeDom.Providers.DotNetCompilerPlatform » и « Microsoft.Net.Compilers ».


Это работало и подходит для сторонних поставщиков веб-хостинга. У вас есть два вопроса: 1) Может ли удаление этих пакетов Nuget каким-либо образом повлиять на продукт? 2) Можно ли удалить эти пакеты из самого шаблона проекта, чтобы избежать этого упражнения каждый раз?
— nura

1) Нет никакого влияния на рабочий процесс или логику продукта; но URL-адрес ( itorian.com/2015/09/roslyn-cscexe-and-vbcexe-deployment-on.html ), который предоставляется @ Ajay2707, говорит, что этот пакет влияет на время загрузки страницы. 2) Я не знаю, как вы можете это сделать, но если вы можете, то проблем не возникнет.
— Кемаль Кефели

3
Удалены оба пакета NuGet. Удалено объявление конфигурации. Тем не менее, эта папка создается во время компиляции или публикации. Мое приложение использует только пакет NuGet «Newtonsoft.Json». Мне тоже нужно удалить его?
— Ранджан Кумар,

8
Имейте в виду, что удаление этих пакетов нарушит использование функций C # 6. Эту проблему можно решить,
— сняв флажок

9
@RanjanKumar: откройте файл csproj в текстовом редакторе и удалите узлы, соответствующие пакетам NuGet, описанным в ответе Кемаля. Сюда могут входить Importузлы, Targetузлы (EnsureNugetPackageBuildImports) и Referenceузлы. Также удалите <system.codedom>узел вашего web.config.
— Брайан,

16

Я была такая же проблема. Выполнил шаги отсюда . В принципе:

  1. Удалить пакет

    Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform <Your Web API project name>
    
  2. В настройках вашего профиля публикации снимите флажок «Разрешить обновлять предварительно скомпилированный сайт». Вы можете найти это в Настройки> Предварительная компиляция во время публикации> настроить


7
Таким образом, вы не можете использовать функции C # 6 в представлениях.
— RokX

2

После поиска такого же выданного мне лица, я просто приехал сюда. Я прочитал правильный ответ.

Я даю ответ, потому что вот хорошая статья для объяснения:

  1. Почему в коде публикации есть этот исполняемый файл, а также среда разработки?
  2. В чем польза и как убрать?

Это также очень хорошая статья об истории этого exe-файла.


2

После бесчисленных усилий .... и согласно этому сайту . Я считаю, что вы можете использовать /p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=falseв MSBuild для преобразования web.config, это также включает компилятор roslyn в сборку. Результат такой же, как при публикации в Visual Studio в файловой системе.


Не могу понять статью по ссылке на веб-сайт, но следуя вашему совету, добавляю, что параметры сборки в MSBuild работают .. Как вы сказали, результат такой же, как и при публикации в файловой системе. Спасибо
— Брюс

2

В репозитории roslyn есть открытая ошибка, связанная с этой проблемой.

В моем случае все, что мне нужно было сделать, это понизить Microsoft.CodeDom.Providers.DotNetCompilerPlatformверсию dll 1.0.6до 1.0.5.


0

У меня была такая же проблема в сентябре 2016 года, когда я взял на себя существующую программу ASP.NET. Я обнаружил, что было несколько версий двух пакетов компилятора, упомянутых Кемалем, установленных в разных проектах решения.

Итак, сначала я обновился, чтобы получить их такими же. VS не сообщает вам, что в этом сценарии доступны обновления (или, может быть, я их пропустил?)

Затем мне пришлось перезапустить VS2015, чтобы пакеты очистились должным образом.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.