我在迁移一个古老的项目为 .NET 6 框架,但是 VS 提示 error NETSDK1136 如果使用 Windows 窗体或 WPF,或者引用使用 Windows 窗体或 WPF 的项目或包,则必须将目标平台设置为 Windows 平台。但是我不想让此项目绑定到 Windows 平台上,不在 TargetFramework 上修改为 net6.0-windows 框架

此提示是在 .NET 的 SDK 的 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" />
</Target>

或者定义在 Microsoft.NET.Sdk.DefaultItems.Shared.targets 代码

  <Target Name="_CheckForTransitiveWindowsDesktopDependencies"
AfterTargets="ResolvePackageAssets"
Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(_TargetFrameworkVersionWithoutV), '5.0')) and '$(TargetPlatformIdentifier)' != 'Windows' and '@(TransitiveFrameworkReference)' != ''">
<ItemGroup>
<_WindowsDesktopTransitiveFrameworkReference Include="@(TransitiveFrameworkReference)"
Condition="'%(Identity)' == 'Microsoft.WindowsDesktop.App' Or
'%(Identity)' == 'Microsoft.WindowsDesktop.App.WPF' Or
'%(Identity)' == 'Microsoft.WindowsDesktop.App.WindowsForms'" />
</ItemGroup>
<NetSdkError Condition="'@(_WindowsDesktopTransitiveFrameworkReference)' != ''"
ResourceName="WindowsDesktopTargetPlatformMustBeWindows" />
</Target>

也就是说在 .NET 5.0 和以上的版本,判断到有使用 Windows Forms 或 WPF 就提示需要加上 Windows 平台

这里的判断是包括项目本身和项目所依赖的所有项目和库,只要有一个用到了,将会提示需要加上 Windows 平台

在设置加上 Windows 平台,就自然引用了 Windows Forms 或 WPF 的负载。而我的项目不期望绑定到 Windows 上,就需要去寻找是哪些依赖的项目或库使用到了 Windows Forms 或 WPF 项目

这里必须说明的是 WPF 和 Windows Forms 在啥都不做的情况下,包括 MONO 等都不使用的情况下,是可以有限的支持在 Linux 和 MAC 环境下运行的。什么是有限的支持?只要不碰 Windows 相关平台的逻辑,包括 PInvoke 调用等,那么将可以很好运行

例如只是用到了 WPF 的一些结构体定义,如 Rect 和 Size 等。或者用到了枚举定义,或者用到某些工具方法等等

而我当前的项目刚好就是存在某些依赖库,引用了 WPF 只是为了用到 Size 等定义而已。为了干掉依赖,我换成了 https://github.com/dotnet-campus/dotnetCampus.WPFType 开源库代替引用 WPF 项目。这个开源库拷贝了 WPF 的一些类型定义,基于 MIT 协议

但是在逐步干掉所有的依赖,依然提示如下

C:\Program Files\dotnet\sdk\6.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.DefaultItems.Shared.targets(250,5): error NETSDK1136: 如果使用 Windows 窗体或 WPF,或者引用使用 Windows 窗体或 WPF 的项目或包,则必须将目标平台设置 为 Windows (通常通过在 TargetFramework 属性中添加 "-windows")。

实际上原因是在 obj 文件夹里面有缓存,只需要删除 obj 文件夹,重新构建即可

迁移 dotnet 6 提示必须将目标平台设置为 Windows 平台的更多相关文章

  1. Cocos2d-x--iOS平台lua加密成luac资源方法和Jsc文件&lt;MAC平台开发试用--windows平台暂未研究&gt;

        首先要说.近期真的是太忙了.好久没写博客了,今天正好有空,就写一下近期在写游戏中的一些发现:     话说,基于Cocos2dx 引擎 + 脚本写游戏,至今的感触就是能够进行增量更新和即时编译 ...

  2. Windows平台下如何使用node.js显示系统盘符

    本文地址: http://www.cnblogs.com/blackmanba/articles/windows-nodejs-show-system-letter.html或者http://fork ...

  3. 关于错误提示:此实现不是 Windows 平台 FIPS 验证的加密算法的一部分的解决方案

    vs上的一个项目,弄了一个aes加密算法.提示说:调用的目标异常.此实现不是 Windows 平台 FIPS 验证的加密算法的一部分.弄了好久一直不行.解决不了.最后找了半天资料终于解决了.估计下来. ...

  4. Domino系统从UNIX平台到windows平台的迁移及备份

    单位机房的一台服务机器到折旧期了,换成了新购IBM机器X3950,而且都预装了windows 2003 server 标准版,所以只有把以前在Unix平台下跑的OA系统迁移到新的windows 200 ...

  5. lower_case_table_names和数据库在Linux和windows平台之间的相互迁移问题

    MySQL关于 lower_case_table_names 的文档 https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivi ...

  6. 将 Net 项目升级 Core项目经验:(三)迁移后的Net Standard版本的类库测试和多平台项目实测

    迁移后的Net Standard版本的类库测试和多平台项目实测 按照第一步的方法,添加一个Net Core的MSTest项目,然后将原来的测试项目下的代码迁移到新测试 项目中,然后引用新的Beyond ...

  7. Linux 工程向 Windows 平台迁移的一些小小 tips

    Linux 工程向 Windows 平台迁移的一些小小 tips VS2013 C++11 Visual Studio 2013 没有做到对 C++11 所有的支持,其中存在的一个特性就是 In-cl ...

  8. cocos2d-x 2.1.4学习笔记01:windows平台搭建cocos2d-x开发环境

    cocos2d-x的大致开发流程是,首先使用win32版进行代码编写并完成游戏,然后将代码迁移到对应的开发环境上进行交叉编译完成游戏打包,如iphone上是mac+xcode,android是ecli ...

  9. windows平台是上的sublime编辑远程linux平台上的文件

    sublime是个跨平台的强大的代码编辑工具,不多说. 想使用sublime完毕linux平台下django网站的代码编辑工作以提高效率(原来使用linux下的vim效率较低,适合编辑一些小脚本). ...

  10. 分析器错误消息: 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分

    关于错误提示:此实现不是 Windows 平台 FIPS 验证的加密算法的一部分的解决方案 不知怎么的,每次Win10升级后相应的注册器都恢复默认了,当我运行08版的asp项目时会报这个错. vs上的 ...

随机推荐

  1. 记录--canvas基础操作

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 以下是一些有关使用Canvas的技巧: 绘制基本形状:Canvas可以用于绘制各种基本形状,如矩形.圆形.线条等.使用 fillRe ...

  2. 记录--服务端推送到Web前端有哪几种方式?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 这个问题? 这个问题一般会出现在面试题里面,然后回答一些诸如轮询.WebSocket之类的答案.当然,实际开发中,也会遇到类似别人给你赞了 ...

  3. 记录--有关CSS盒模型之内边距、边框、外边距的十九问题

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 本篇文章主要探讨盒模型,以及内边距.边框.外边距的面试题与思考,也希望您能把您的思考和遇到的问题以评论的方式补充下,后期,我将会补充到文章 ...

  4. 深度探索.NET Feature Management功能开关的魔法

    前言 .NET Feature Management 是一个用于管理应用程序功能的库,它可以帮助开发人员在应用程序中轻松地添加.移除和管理功能.使用 Feature Management,开发人员可以 ...

  5. KingbaseES V8R6 等待事件之IO类BufFileRead BufFileWrite

    等待事件含义 当数据库创建临时文件时,会发生IO:BufFileRead和IO:BufFileWrite等待事件.当操作需要的内存比当前定义的work_mem内存参数更多时,会将临时数据写入磁盘永久存 ...

  6. KingbaseES V8R6集群运维案例之---securecmdd工具usePAM配置

    案例说明: 默认在部署securecmdd工具后,在配置文件securecmdd_config中配置参数usePAM=yes,在有的系统主机环境,会导致securecmd客户端连接失败. 适用版本: ...

  7. JDBC访问KingbaseES数据库异常 -- 案例分析

    应用使用jdbc访问KingbaseES数据库发生异常:SocketTimeoutException Read timed out 一.异常现象: 应用显示ERROR信息: Caused By: ja ...

  8. KingbaseES 可更新的视图

    可更新视图 可简化视图可自动更新:系统将允许在视图上使用 INSERT.UPDATE 和 DELETE 语句,就像在常规表上一样.如果视图满足以下所有条件,就是可简化视图,则视图可自动更新: 该视图的 ...

  9. OpenHarmony轻松玩转GIF数据渲染

    OpenAtom OpenHarmony(以下简称"OpenHarmony")提供了Image组件支持GIF动图的播放,但是缺乏扩展能力,不支持播放控制等.今天介绍一款三方库--o ...

  10. 运动App如何实现端侧后台保活,让运动记录更完整?

    你在锻炼健身时,有没有遇到这样的情况?辛辛苦苦锻炼了几小时,却发现App停止了运行,本次运动并没有被记录到App上,从而失去了一个查看完整运动数据的机会? 运动类App是通过手机或者穿戴设备的传感器, ...