背景
我的项目(以下称为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项目中应该是起作用的!
<ProjectReference Include="..\multitargeted_lib\multitargeted_lib.csproj">
<SetTargetFramework>TargetFramework=netstandard2.0</SetTargetFramework>
</ProjectReference>
延申 以下三个是一些类似的问题,其中有很多.net项目文件的处理示例,比如条件引用之类的可以参考借鉴。
解决方案
最终我的思考是,为什么单单会指向.net core而不是.net framework?于使我把TargetFrameworks调换了一下位置:
<PropertyGroup>
...
<TargetFrameworks>net461;netcoreapp3.1</TargetFrameworks>
...
</PropertyGroup>
结果仍然不行,因为VS没重启!没重启!改完重启一下VS即可。