Привет, коллеги-разработчики MSFT!
Для вашего удобства я создал образец проекта, доступный по адресу
https://github.com/JiyaDesai-FandCo/WpfAppdotnet8
У нас есть существующий код в библиотеке (типа .NET Standard 2.0), который активно использует API-интерфейсы Store, надстройки и прочее. и мы повторно используем эту библиотеку во всех наших проектах приложений для магазина. В настоящее время эта библиотека используется в проектах WPF (.NET 4.8) и UWP, и все работает нормально.
Проблема возникла, когда мы решили создать проект WPF с .NET Core 8.0. Именно здесь мы не можем использовать библиотеку.
Теперь позвольте мне объяснить пример проекта на GitHub, который вы можете загрузить, изучить и помочь нам выявить проблему или обходной путь. Цель состоит в том, чтобы повторно использовать библиотеку во всех видах проектов. (WPF с .NET 4.8, UWP и WPF с .NET Core 8.0). Имея в виду, что мы собираемся опубликовать его в магазине.
Также обратите внимание: во время отладки всегда запускайте только проекты упаковки.
КлассБиблиотекаДотнетСтандарт2:
xWpfApp1: WPF с .NET Framework 4.8.
xWpfApp1_Package: проект упаковки для xWpfApp1.
WpfAppdotnet8: WPF с .NET Core 8.0.
WPFdotnet8_PackageToPublishToStore: проект упаковки для WpfAppdotnet8.
Мы хотим устранить эту ошибку, чтобы мы могли успешно использовать библиотеку в WpfAppdotnet8.
Надеюсь, я смог объяснить.
С уважением
Очень жду вашего ответа.
Вы уже задавали тот же вопрос stackoverflow.com/q/78450352/3137337 под другим аккаунтом. Возможно, вам больше не нужно сохранять предыдущий вопрос?
@SimonMourier В нашей библиотеке есть много кода, который в настоящее время используется приложениями WPF и UWP. перенос библиотеки может привести к поломке старых приложений.
Нет, это не должно сломать многие вещи. Вы пытались заменить его .NET Framework 4.8 или .NET 8? Код должен быть очень совместимым в этом направлении, поскольку стандарт .NET — это всего лишь список контрактов, абстрактное пересечение реальных платформ (сейчас устаревшее, всегда создававшееся для перехода).





.NET 6 и более поздние версии используют параметр моникера целевой платформы для использования API-интерфейсов среды выполнения Windows:
Вызов API-интерфейсов среды выполнения Windows в настольных приложениях
Это означает, что вам следует создать несколько версий вашей библиотеки классов:
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net6.0-windows10.0.17763.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Condition = "'$(TargetFramework)' == 'netstandard2.0'"
Include = "Microsoft.Windows.SDK.Contracts" Version = "10.0.22621.3233">
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>
Вам также следует включить версию ОС в TFM проекта .NET 8:
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
Совершенно поразительно, @mm8, сэр! Ваше решение сработало как мечта! Спасибо вам огромное!
Почему бы вам просто не избавиться от стандарта .NET, сохранить 4.8 (или перенести его на .NET 8) и .NET 8 вместе devblogs.microsoft.com/dotnet/the-future-of-net-standard