Публікуйте веб-сайт без Roslyn


91

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

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

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

Як опублікувати веб-сайт без roslynпопередньої версії Visual Studio?

EDIT: Я отримав цю помилку під час спроби отримати доступ до мого веб-сайту.

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

Здається, IIS намагається виконати, roslyn\csc.exeале мій обліковий запис користувача не має дозволу на це. У попередній версії Visual Studio ця помилка не відображається.


Крім того, Roslyn - це лише набір бібліотек DLL. Господар не може знати чи піклуватися, що вони роблять.
Слакс

3
@Slaks IIS намагається виконати csc.exe. Дивіться редагування.
Niyoko Yuliawan

Якщо ви використовуєте Plesk, ви можете вимкнути "Виділений пул додатків IIS для своїх веб-сайтів", тоді вам навіть не потрібно видаляти ці пакети!
Вахід Амірі,

Відповіді:


183

Я щойно стикався з тією ж проблемою. Коли ви створюєте новий веб-проект, два nuget-пакети автоматично додаються до вашого проекту. Якщо ви їх видалите, вашу проблему слід вирішити. Назви пакетів: " Microsoft.CodeDom.Providers.DotNetCompilerPlatform " та " Microsoft.Net.Compilers ".


Це працювало і підходить для сторонніх постачальників веб-хостингу. Є два запитання щодо цього: 1) Чи може видалення цих пакетів Nuget якось вплинути на продукт? 2) Чи можна вилучити ці пакети із самого шаблону проекту, щоб кожного разу уникати цієї вправи?
нура

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

3
Вилучено обидва пакунки NuGet. Видалено декларацію конфігурації. Проте ця папка створюється під час компіляції або публікації .. Тільки пакет NuGet, який використовує моя програма, - "Newtonsoft.Json". Чи потрібно мені його також видаляти?
Ranjan Kumar

8
Майте на увазі, що видалення цих пакетів порушить використання функцій C # 6. Цю проблему можна вирішити, знявши прапорець біля пункту "Дозволити попередньо скомпільований сайт оновлюватись", який попередньо збирає представлення тощо.
Rutix,

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. Чому код публікації має цей exe, а також середовище розробки?
  2. У чому перевага і як видалити?

Це також дуже хороша стаття про історію цього exe


2

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


Не можу зрозуміти статтю за посиланням на веб-сайт, але слідуючи вашій пораді додати, що параметри побудови в MSBuild працюють .. Як ви вже сказали, результат такий самий, як і при публікації у файловій системі. Дякую
Брюс,


0

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

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

Потім мені довелося перезапустити VS2015 для належного очищення пакетів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.