需要帮助将WinForm迁移到.NET 5。

19

我正在将一个WinForm应用从.NET Core 3.1迁移到.NET 5,并出现以下错误:

严重性代码 描述 项目文件 行数 抑制状态 错误NETSDK1136 目标平台必须设置为Windows(通常是通过在TargetFramework属性中包含“-windows”来实现),当使用Windows Forms或WPF或引用这样做的项目或软件包时。 PublicOutput.core C:\Program Files\dotnet\sdk\5.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.DefaultItems.targets 369

这是指向Microsoft.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=%3FappId%3DDev16IDEF1%26l%3DEN-US%26k%3Dk(NETSDK1136)%26rd%3Dtrue&view=vs-2019

我已将我的目标框架设置如下:

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

非常感谢您的帮助。


1
通常通过在TargetFramework属性中包含“-windows”来实现...那么你做了吗? - ADyson
请问您正在使用哪个版本的.NET 5?此链接提到了WPF,但似乎是类似的问题。 - ADyson
2
我已将目标框架设置为以下内容<TargetFramework>net5.0</TargetFramework>。好的,显然这不包括-windows标志,对吗?请参见https://www.thomasclaudiushuber.com/2020/03/26/net-5-merging-net-core-and-net-standard-with-new-target-framework-monikers-tfms/,其中提到了`net5.0-windows`。 - ADyson
1
或者,https://nicksnettravels.builttoroam.com/net-5-tfms/ 可能会对你有所帮助。 - ADyson
@ADyson 我已经更新了我的问题,包括目标框架。我正在使用SDK 5.0.100作为我的net 5版本。 - M Leipper
1
我已经看到了 - 请阅读我的前两条评论。 - ADyson
3个回答

38
错误很明显:
当使用Windows Forms或WPF时,目标平台必须设置为Windows(通常通过在TargetFramework属性中包含“-windows”来实现)。
因此,请将<TargetFramework>net5.0</TargetFramework>更改为<TargetFramework>net5.0-windows</TargetFramework>,如文档所述

NETSDK1005:资源文件缺少目标“.net5.0-windows”。 - huang
4
请使用稳定版本16.9,删除obj文件夹并执行nuget restore操作。 - magicandre1981

0

如果您在像Azure这样的DevOps环境中共享项目,可能会发生这种情况。

为了找到问题的根源,我尝试逐个构建每个项目,并意识到我的一个团队成员将一个新的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,所以无法构建。

在TargetFramework属性中包含“-windows”在这种情况下没有帮助。

我只是从解决方案中卸载了该项目,然后我又能够重新构建它而没有错误了。


-4

在项目属性中将目标框架更改为正确的版本。


9
你不应该把问题写成回答!! 应该将其写成评论。 - Muaath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接