нужна помощь в переносе winform в net 5

#c# #winforms #.net-core #migration #.net-5

#c# #winforms #.net-ядро #миграция #.net-5

Вопрос:

Я переношу приложение winform с net core 3.1 на net 5 и получаю следующую ошибку.

Описание кода серьезности Ошибка состояния подавления строки файла проекта NETSDK1136 Для целевой платформы должна быть установлена Windows (обычно путем включения ‘-windows’ в свойство targetFramework) при использовании Windows Forms или WPF или ссылки на проекты или пакеты, которые это делают. PublicOutput.core C:Program Filesdotnetsdk5.0.100SdksMicrosoft.NET.SdktargetsMicrosoft.NET.Sdk.DefaultItems.targets 369

Это раздел Microsofts.net.sdk.DefaultItems.targets, на которые это ссылается.

   <Target Name="_CheckForInvalidWindowsDesktopTargetingConfiguration"
        BeforeTargets="_CheckForInvalidConfigurationAndPlatform"
        Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(_TargetFrameworkVersionWithoutV), '5.0')) and ('$(UseWindowsForms)' == 'true' or '$(UseWPF)' == 'true')">
    <NETSdkError Condition="'$(TargetPlatformIdentifier)' != 'Windows'"
                 ResourceName="WindowsDesktopTargetPlatformMustBeWindows" >
  

Я не понимаю ошибки, и ссылка, по которой мне отправляется ошибка, не помогает

https://learn.microsoft.com/en-us/visualstudio/?f1url=?appId=Dev16IDEF1&l=EN-US&k=k(NETSDK1136)&rd=trueamp;view=vs-2019

Для моей целевой среды установлено следующее:

     <TargetFramework>net5.0</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
  

любая помощь будет оценена

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

1. «обычно путем включения ‘-windows’ в свойство targetFramework» … так вы это сделали?

2. Постскриптум developercommunity.visualstudio.com/content/problem/1218104 /… — какую версию .NET 5 вы используете? В нем упоминается WPF, но, похоже, аналогичная проблема

3. «У меня установлена моя целевая среда на следующее <TargetFramework>net5.0</TargetFramework> » .. ок, так что ясно, что флаг не включает -windows , не так ли? См . thomasclaudiushuber.com/2020/03/26 /… где в нем упоминается net5.0-windows

4. В качестве альтернативы, nicksnettravels.builttoroam.com/net-5-tfms может быть, это поможет вам

5. Я уже видел это — прочитайте мои последние 2 комментария выше.

Ответ №1:

Ошибка очевидна:

Целевая платформа должна быть установлена на Windows (обычно путем включения ‘-windows‘ в свойство targetFramework) при использовании Windows Forms или WPF,

так что измените <TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0-windows</TargetFramework> , как написано в документах

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

1. NETSDK1005: в файле ресурсов отсутствует цель «.net5.0-windows».

2. @JokeHuang убедитесь, что вы используете стабильный 16.9, удалите папку obj и выполните восстановление nuget

Ответ №2:

Это может произойти, если вы предоставляете общий доступ к проекту в среде DevOps, такой как Azure.

Чтобы понять причину этой проблемы, я попытался собрать каждый отдельный проект один за другим и понял, что один из моих товарищей по команде добавил новый проект WinForm в наш проект API

файл .csproj

 <Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows')) and '$(MSBuildRuntimeType)' == 'Full'">$(TargetFrameworks);net6.0-windows</TargetFrameworks>
    <Nullable>enable</Nullable>
    <UseWindowsForms>true</UseWindowsForms>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

</Project>
  

Я использовал Mac, поэтому не мог создавать.

Включение ‘-windows’ в свойство targetFramework в этом случае не поможет.

Я просто выгрузил этот проект из решения, а затем смог снова перестроить его без ошибок.

Ответ №3:

Измените целевую платформу на правильную версию в свойствах проекта.

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

1. Вы не должны писать вопрос как ответ!! Запишите это как комментарий.