При публикации проекта .NET Framework элементы .NET Core встраиваются в web.config

Мой проект — .NET Framework 4.8, а проект выполнен в стиле SDK. Web.config — это базовый файл, созданный для веб-приложения ASP.NET (в основном MVC). Я создал профиль публикации, который публикуется в папке.

Когда я публикую проект, в файле web.config в папке публикации теперь есть записи .NET Core. В частности, этот процесс добавляет следующее:

<system.webServer>
  <handlers>
    <add name = "aspNetCore" path = "*" verb = "*" modules = "AspNetCoreModule" resourceType = "Unspecified" />
  </handlers>
  <aspNetCore processPath = "dotnet" arguments = ".\myApp.dll" stdoutLogEnabled = "false" stdoutLogFile = ".\logs\stdout" />
</system.webServer>

Мне было трудно поверить, что это происходит (а не в результате чего-то, что я сделал), поэтому я повторил это, выполнив следующие шаги:

  1. Создайте новое веб-приложение ASP.NET (.NET Framework) — выберите MVC в диалоговом окне.
  2. Щелкните проект правой кнопкой мыши и выберите «Обновить». Выберите, чтобы обновить его до проекта в стиле SDK.
  3. Исправьте недостающие ссылки. Измените тип проекта на «Библиотека» из консоли.
  4. Щелкните проект правой кнопкой мыши, выберите «Опубликовать» и создайте профиль публикации папки.
  5. Опубликуйте это. Сравните web.config в опубликованном каталоге и в проекте. Опубликованный файл содержит записи .NET Core.

Почему это происходит? Как мне предотвратить это? Этого не происходит, если проект не выполнен в стиле SDK.

P.S. Использование последней версии Visual Studio 2022.

П.П.С. Нашел исправление. Добавьте <IsWebConfigTransformDisabled>true</IsWebConfigTransformDisabled> к первой группе свойств в файле csproj.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
120
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это происходит потому, что ваш проект использует новый формат проекта в стиле SDK (после обновления), который является общим для проектов .NET Core, но также может использоваться проектами .NET Framework, чтобы воспользоваться преимуществами некоторых новых функций. Когда вы публикуете проект в стиле SDK, инструментарий .NET CLI автоматически создает файл web.config с необходимыми настройками для размещения приложения ASP.NET Core в IIS, включая обработчик aspNetCore и настройки модуля. Это ожидаемое поведение для проектов ASP.NET Core, но в проекте .NET Framework оно может быть неожиданным. Чтобы этого не произошло, вы можете:

  • Вручную отредактируйте файл web.config после публикации, чтобы удалить Настройки, специфичные для ASP.NET Core.
  • Настройте процесс публикации, чтобы избежать создания этих настроек. Это может включать изменение файла .csproj или профиля публикации для управления преобразованием web.config.

Подробнее об этом можно прочитать здесь: https://learn.microsoft.com/en-us/dotnet/standard/frameworks

Приложение или библиотека могут использовать версию .NET Standard. Версии .NET Standard представляют собой стандартизированные наборы API для всех реализаций .NET. Например, библиотека может ориентироваться на .NET Standard 1.6 и получать доступ к API, которые работают в .NET Core и .NET Framework, используя одну и ту же базу кода.

Другое решение для вас — рассмотреть возможность возврата к старому формату проекта для проекта .NET Framework, чтобы вообще избежать этой проблемы.

«Настройте процесс публикации, чтобы избежать создания этих настроек». Это звучит многообещающе. Как мне это сделать? Ничего конкретного в ссылке не вижу.

AngryHacker 26.04.2024 21:09

@AngryHacker Вы можете создать собственную цель в вашем файле .csproj, которая запускается после определенного события в процессе публикации. Например, чтобы запустить сценарий после того, как все файлы собраны для публикации, вы можете добавить что-то вроде этого: <Target Name = "RunCustomScript" AfterTargets = "GatherAllFilesToPublish"><Exec Command = "path\to\your\script.ps1" /> </Target> И теперь вы можете перезаписать копию, если хотите, чтобы ваш web.config

D A 26.04.2024 22:07

О да, я уже делаю это во время развертывания. По сути, вы сказали: запустите сценарий PowerShell, чтобы удалить изменения ядра .net из web.config. Я надеялся на более чистый метод, например, на наличие какой-либо записи в .csproj, которая указывала бы системе сборки, что вообще не следует генерировать основные записи .net в файле web.config. В конечном итоге я решил воспользоваться вашим последним предложением — вернуться к старому формату проекта. Новый просто не стоит головной боли для проектов .NET Framework.

AngryHacker 26.04.2024 23:45

Другие вопросы по теме