Опубликовать сайт без 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-файла.

Ajay2707
источник
2

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

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

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

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

Фелипе Миоссо
источник
0

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

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

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

Роб фон Нессельроде
источник