我在迁移一个古老的项目为 .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. 记录--vue中使用vue-video-player实现直播推流播放m3u8

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1.安装 vue-video-player npm install vue-video-player --save npm install ...

  2. wire和reg型变量的组合使用

    模型功能 实现寄存器之间的连线 实现寄存器的声明 建构时钟的时序系统 模型框图 `timescale 1ns / 1ps /* */ // ****************************** ...

  3. SPEL表达式注入分析

    环境依赖 <dependencies> <dependency> <groupId>org.springframework</groupId> < ...

  4. python爬虫等获取实时数据+Flume+Kafka+Spark Streaming+mysql+Echarts实现数据动态实时采集、分析、展示

    使用爬虫等获取实时数据+Flume+Kafka+Spark Streaming+mysql+Echarts实现数据动态实时采集.分析.展示 [获取完整源码关注公众号:靠谱杨阅读人生 回复kafka获取 ...

  5. C#/.NET/.NET Core优秀项目和框架2024年3月简报

    前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍.功能特点.使用方式以及部分功能截图 ...

  6. #BFS,二进制#CF1776J Italian Data Centers

    洛谷题面 CF1776J 分析 将原图的点所拆开的点按二进制编号,那么同一个点之间连边当且仅当恰好一个二进制位不同, 不同点之间连边颜色相同则其二进制相同,否则完全相反. 可以钦定起点就是 \((x, ...

  7. 今晚战码先锋润和赛道第2期直播丨如何参与OpenHarmony代码贡献

    「OpenHarmony 开源贡献者计划 2022」战"码"先锋 PR 征集,"润和赛道"已于6月15日正式开启.套件在手.先机在握,更有润和软件的超多赋能和专 ...

  8. SpringCloud OpenFeign token中转

    OpenFeign 的本质是调用指定服务的 Controller. 前后端分离项目,调用 Controller 是需要传递 token 的. OpenFeign 并不会自动携带 token 去访问 C ...

  9. 将py文件编译成pyc

    核心代码 import compileall compileall.compile_file("a.py", legacy=True, force=True) 演示步骤 1.新建 ...

  10. mybatis 手写分页

    mybatis 手动分页查询 .xml文件 SELECT .... FROM dip_pack_box AS t1 LEFT JOIN dip_pack_content AS t2 ON t1.id ...