背景

我的项目(以下称为LibA)中有一个多目标框架编译的项目,即项目文件包含如下代码:

<PropertyGroup>
...
<TargetFrameworks>netcoreapp3.1;net461</TargetFrameworks>
...
</PropertyGroup>

问题 我的一个.Net Framework的WPF程序(以下称为AppB),引用LibA项目后(注意是项目而非dll文件),在xaml中使用到LibA中的类都会提示无法识别。而编译是可以成功的,程序也可以照常运行,只有xaml会有报错提示,且设计器也会报错无法渲染预览

体现 引用处会出现黄色三角形标记,且引用属性中路径显示为空。如果删除重新添加引用,发现路径指向的是.net core的编译结果,且重启VS后重新变为黄色三角警告且路径为空。

思考

问题很清楚了,是设计器(注意,这里单指XAML的设计器)和项目引用识别了错误的目标框架的dll文件。编译器和VS后台代码都可以正确识别。

参考

在排查的过程中,我看了一些可能的解决方案,但是遗憾的是,并没有解决我的问题。以下是一个类似的问题,不过他的需求是.net standard,而我的是.net framework。注意,这个方式只是不适合.net framework的工程,在.net core 和.net standard项目中应该是起作用的!

Is There a Way to Force a Project Reference to .NET Standard Project to a Specific TargetFramework - Stack Overflow

<ProjectReference Include="..\multitargeted_lib\multitargeted_lib.csproj">
<SetTargetFramework>TargetFramework=netstandard2.0</SetTargetFramework>
</ProjectReference>

延申 以下三个是一些类似的问题,其中有很多.net项目文件的处理示例,比如条件引用之类的可以参考借鉴。

Specify which target framework you want to use from a dependency · Issue #2280 · dotnet/sdk (github.com)

Removing 4.7.1 target build from library for #160. Thanks Martin! ht… · ExtendedXmlSerializer/home@14c7ee8 (github.com)

Specifying both 'TargetFrameworks' and 'TargetFramework' causes dotnet run to fail badly. · Issue #8676 · dotnet/sdk (github.com)

解决方案

最终我的思考是,为什么单单会指向.net core而不是.net framework?于使我把TargetFrameworks调换了一下位置:

<PropertyGroup>
...
<TargetFrameworks>net461;netcoreapp3.1</TargetFrameworks>
...
</PropertyGroup>

结果仍然不行,因为VS没重启!没重启!改完重启一下VS即可。

.Net下引用多目标框架项目导致XAML无法识别类型的问题的更多相关文章

  1. .NET Standard SDK 样式项目中的目标框架

    系列目录     [已更新最新开发文章,点击查看详细] 包表示形式 .NET Standard 引用程序集的主要分发载体是 NuGet 包. 实现会以适用于每个 .NET 实现的各种方式提供. NuG ...

  2. 微软URLRewriter.dll的url重写在目标框架.Net Framework2.0、4.0和应用程序池经典模式、集成模式下的配置

    大家参考几篇园子里面的这篇文章: 文章1:微软URLRewriter.dll的url重写的简单使用 (讲解了使用UrlReWriter.dll的下载.web.config如何在目标框架2.0应用程序池 ...

  3. 已使用.netframework,version=v4.6.1 而不是目标框架netcoreapp,version=v2.1 还原包,此包可能与项目不完全兼容

    已使用.netframework,version=v4.6.1 而不是目标框架netcoreapp,version=v2.1 还原包,此包可能与项目不完全兼容 NU1202: 包 System.Run ...

  4. vs2015重新安装后,项目属性中的目标框架中没有framework4.6.1

    vs2015重新安装后,安装完后 项目属性中的目标框架中没有framework4.6.1,  控制面板的程序和功能中存在该安装包. 原因: NDP461-DevPack-KB3105179-CHS.e ...

  5. IDEA下使用maven构建web项目(SpringMVC+Mybatis整合)

    需求背景:由于最近总是接到一些需求,需要配合前端团队快速建设移动端UI应用或web应用及后台业务逻辑支撑的需求,若每次都复用之前复杂业务应用的项目代码,总会携带很多暂时不会用到的功能或组件,这样的初始 ...

  6. visual studio单项目一次生成多框架类库、多框架项目合并

    目录 不同平台框架项目使用同一套代码,一次编译生成多个框架类库 需要先了解的东西 分析 添加PropertyGroup 多目标平台 编译符号和输出目录设置 添加依赖 代码文件处理 主副平台项目文件处理 ...

  7. 【推荐】使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享

    使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工管理源码分享   在开始讲解之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery的U ...

  8. 使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享

    使用Jquery+EasyUI 进行框架项目开发案例解说之中的一个 员工管理源代码分享 在開始解说之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery ...

  9. 使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享

    使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享 使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工管理源码分享    在开始讲解之前,我们先来看一下什 ...

随机推荐

  1. Java中base64与byte[]转换

    1.base64转byte[] 导包: import java.util.Base64 转换: String base64Str = base64的字符串; byte[] bytes = Base64 ...

  2. HTTPS:网络安全攻坚战

    本文为<三万长文50+趣图带你领悟web编程的内功心法>第五个章节. 5.HTTPS 我们知道,明文传输和不安全是HTTP的其中一个特点,但是随着越来越多机密的业务交易转移到线上,如银行转 ...

  3. javascript中的闭包closure详解

    目录 简介 函数中的函数 Closure闭包 使用闭包实现private方法 闭包的Scope Chain 闭包常见的问题 闭包性能的问题 总结 简介 闭包closure是javascript中一个非 ...

  4. WBX24T2X CPEX国产化万兆交换板

      WBX24T2X是基于盛科CTC5160设计的国产化6U三层万兆CPEX交换板,提供24路千兆电口和2路万兆光口,采用龙芯 2K1000处理器.支持常规的L2/L3协议,支持Telnet.SNMP ...

  5. Apache配置 11. 访问控制-user_agent

    (1)介绍 user_agent是指用户浏览器端的信息.比如你是用IE的还是Firefox浏览器的.有些网站会根据这个来调整打开网站的类型,如是手机的就打开wap,显示非手机的就打开PC常规页面. ( ...

  6. mysql最经典的语句

    一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...

  7. socket 之send和recv原理剖析

    认识TCP socket的发送缓冲区和接收缓冲区 当创建一个TCP socket对象的时候会有一个发送缓冲区和一个接收缓冲区,相当与内存中的一片空间 send原理剖析 send是不是直接把数据发送给服 ...

  8. Linux sed 使用笔记

    sed 工具使用笔记 Linux中经常需要对一些超大的文本文件进行操作,例如 GB 级别的 CSV.TXT.LOG 文件,如果使用 vi 或者 vim 编辑器操作会非常慢且卡,此时 sed 工具或许可 ...

  9. 攻防世界 reverse 进阶 15-Reversing-x64Elf-100

    15.Reversing-x64Elf-100 这题非常简单, 1 signed __int64 __fastcall sub_4006FD(__int64 a1) 2 { 3 signed int ...

  10. 一种3位sar adc工作过程推导(二)

    3位sar adc采用下图的电容阵列,需要23个电容,它的基本单元有二进制加权的电容阵列.1个与LSB电容等值的电容:它利用电容上的初始电荷再分配完成二进制搜索算法,因此功耗一般比较小,而且不需要额外 ...