Visual Studio 16.8 нарушает сборку .NET Framework 4.8 WPF

#c# #wpf #visual-studio

#c# #wpf #visual-studio

Вопрос:

Теперь я обновился до Visual Studio 16.8, и при этом мое существующее (большое) решение не может создавать какие-либо проекты WPF. Повсюду сообщения об ошибках, такие как следующие:

 10>C:...srcUserInterfaceDataWriterMonitorApp.xaml.cs(5,25,5,28): error CS1558: "App" hat keine passende statische Main-Methode.
10>C:...UserInterfaceDataWriterMonitorApp.xaml.cs(9,4,9,23): error CS0103: Der Name "InitializeComponent" ist im aktuellen Kontext nicht vorhanden.
  

Очевидно, что не удается выполнить предварительную обработку файлов xaml. Когда я меняю заголовок csproj проекта-нарушителя с <Project Sdk="Microsoft.NET.Sdk"> на <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> , я получаю:

 10>C:Program Filesdotnetsdk5.0.100SdksMicrosoft.NET.Sdk.WindowsDesktoptargetsMicrosoft.WinFX.targets(240,9): error MC1000: Unbekannter Buildfehler, "Could not find assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Either explicitly load this assembly using a method such as LoadFromAssemblyPath() or use a MetadataAssemblyResolver that returns a valid assembly."
  

Это даже происходит, если я удаляю все прямые ссылки из проекта.

Различные другие подходы (включая установку sdk на 4.8 в global.json) генерировали разные сообщения об ошибках, но тоже не работали.

Как я могу сделать так, чтобы сборка не использовала SDK 5.0?Мне нужно, чтобы он был установлен для других проектов, но здесь я просто хочу, чтобы мое решение строилось, как и раньше, с .NET Framework 4.8.

Примечание: я попробовал пример приложения .NET 4.8 WPF. Эта сборка выполняется, но в ней используется старый формат файла проекта. Если я изменю его на новый формат, у меня возникнут аналогичные проблемы. После некоторой возни это теперь работает, возможно, потому, что в противном случае этот пустой проект вообще не имеет ссылок.

Комментарии:

1. Вы можете установить версию SDK в global.json

2. @canton: Я пробовал это. Что нужно для этого сделать? Мой глобальный файл .json гласит: { "sdk": { "version": "4.8" } }

3. Какую версию SDK вы использовали ранее? Вы, конечно, нацеливались на .NET Framework 4.8, но это не та версия SDK, которую вы использовали для сборки. Пакеты SDK перечислены здесь в разделе «.NET Core»

4. @LexLi: По-видимому, это возможно. Мы уже давно используем проекты в стиле SDK. И только сейчас мне удалось создать образец проекта WPFApp с проектом в стиле SDK.

5. К сожалению, я не думаю, что мы можем предложить гораздо больше без повторения. Если вы нацеливаетесь на фреймворк из проекта в стиле SDK, рассмотрите возможность использования MSBuild.SDK.Extras, это устраняет множество проблем, которые в противном случае возникают

Ответ №1:

Очевидно, я сделал слишком много вещей одновременно. Использование global.json с

 {
  "sdk": {
    "version": "3.1.101"
  }
}
  

и никакие другие изменения (особенно без изменений <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> ) не исправили сборку.

Комментарии:

1.Подождите, вы сказали, что изменили его на <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> . Вы действительно изменили его из значения?

2. Сначала я изменил его на это значение, но мне пришлось отменить это, чтобы изменение global.json работало должным образом (или я все равно получил бы систему. Ошибка веб-сборки не найдена)

Ответ №2:

Я удалил <usewpf>true</usewpf> из своих проектов

Комментарии:

1. Это работает, только если проекты фактически не используют WPF. У меня есть.