Мой проект — .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>
Мне было трудно поверить, что это происходит (а не в результате чего-то, что я сделал), поэтому я повторил это, выполнив следующие шаги:
Почему это происходит? Как мне предотвратить это? Этого не происходит, если проект не выполнен в стиле SDK.
P.S. Использование последней версии Visual Studio 2022.
П.П.С. Нашел исправление. Добавьте <IsWebConfigTransformDisabled>true</IsWebConfigTransformDisabled>
к первой группе свойств в файле csproj.
Это происходит потому, что ваш проект использует новый формат проекта в стиле SDK (после обновления), который является общим для проектов .NET Core, но также может использоваться проектами .NET Framework, чтобы воспользоваться преимуществами некоторых новых функций. Когда вы публикуете проект в стиле SDK, инструментарий .NET CLI автоматически создает файл web.config с необходимыми настройками для размещения приложения ASP.NET Core в IIS, включая обработчик aspNetCore и настройки модуля. Это ожидаемое поведение для проектов ASP.NET Core, но в проекте .NET Framework оно может быть неожиданным. Чтобы этого не произошло, вы можете:
Подробнее об этом можно прочитать здесь: 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 Вы можете создать собственную цель в вашем файле .csproj, которая запускается после определенного события в процессе публикации. Например, чтобы запустить сценарий после того, как все файлы собраны для публикации, вы можете добавить что-то вроде этого: <Target Name = "RunCustomScript" AfterTargets = "GatherAllFilesToPublish"><Exec Command = "path\to\your\script.ps1" /> </Target> И теперь вы можете перезаписать копию, если хотите, чтобы ваш web.config
О да, я уже делаю это во время развертывания. По сути, вы сказали: запустите сценарий PowerShell, чтобы удалить изменения ядра .net из web.config. Я надеялся на более чистый метод, например, на наличие какой-либо записи в .csproj, которая указывала бы системе сборки, что вообще не следует генерировать основные записи .net в файле web.config. В конечном итоге я решил воспользоваться вашим последним предложением — вернуться к старому формату проекта. Новый просто не стоит головной боли для проектов .NET Framework.
«Настройте процесс публикации, чтобы избежать создания этих настроек». Это звучит многообещающе. Как мне это сделать? Ничего конкретного в ссылке не вижу.