WPF资源字典中出现“此项目未引用程序集”错误

11
创建一个名为xmlnsError的新WPF工程。
PresentationFramework.Aero添加为引用。
将此ResourceDictionary添加到App.xaml中。
<ResourceDictionary Source="/PresentationFramework.Aero,Version=4.0.0.0,Culture=Neutral,PublicKeyToken=31bf3856ad364e35,processorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml"/>

这样做会显示一个警告

Assembly 'PresentationFramework.Aero,Version=4.0.0.0,Culture=Neutral,PublicKeyToken=31bf3856ad364e35,processorArchitecture=MSIL' is not referenced by this project
我已经仔细检查过版本号确实为4.0.0.0,而且PublicKeyToken也确实为31bf3856ad364e35。我通过导航到C:\Windows\Microsoft.NET\assembly\GAC_MSIL\PresentationFramework.Aero以及在运行时检查AssemblyInfo来检查GAC。有没有修复此警告的方法?这是对WPF Windows 8兼容性问题的后续提问。

你是否已经将该项目的引用添加进去了?这个DLL的常见位置是:C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF。 - Xcalibur37
是的。那是我在问题中提到的第二步——手动添加或从程序集中添加都是一样的。 - Shaku
我曾经遇到过类似的问题,通过将该程序集添加到另一个项目中并进行构建来解决它。之后问题就消失了。希望对你有所帮助。 - XAMlMAX
很遗憾,什么也没做。 - Shaku
正如我在你的另一个问题中所写的那样,我真的认为这是设计师分析的限制,只要它实际上运行良好,你可以忽略这个特定的警告。我还在你原来的问题中上传了概念证明(虽然很想看看是否有人能够真正消除这个警告)。 - Maverik
你所有的项目都使用相同的.NET版本吗?它们是否使用相同的构建配置(x86/x64等)? - Tim Hansson
3个回答

2
通常情况下,使用程序集中的资源时,无需指定程序集版本、区域设置和密钥。以下示例编译时没有任何警告:
<ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml"/>

3
确实可以编译,但它确实会有改变。在我的情况下,生成的WPF应用程序甚至在其他系统上启动时都会崩溃。 - Simon D.
很棒的解决方案,非常有效。非常感谢MattCat! - TripleAntigen
这可能只有在PresentationFramework.Aero引用上设置了“复制本地”才能正常工作 - 而这样做通常是不正确的,因为您不应该将框架的部分与应用程序一起分发。更好的解释在这里:https://dev59.com/0msz5IYBdhLWcg3wADIm#8185946 - StayOnTarget

0

显然(MSDN论坛),有一个仅包含元数据的Aero版本,正确的版本位于C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF。目前我没有任何方法检查是否存在类似的问题/解决方案适用于任何.NET 4.5版本。


0

当我尝试使用 PresentationFramework.Classic 时,我遇到了非常类似的问题。即使我三次检查所有程序集细节是否正确(这些细节都是从 dotPeek 复制/粘贴的),我仍然收到了相同的警告。

然而,似乎这个警告可能是虚假的,因为编译后的应用程序可以正常工作。我在一个“干净”的虚拟机映像上进行测试,我确信没有任何污染环境的东西,例如不需要的本地副本 PresentationFramework.Classic.dll 不在应用程序文件夹中。


此外,正如@Maverik在评论中指出的那样:

我真的认为这是设计分析的限制,只要它实际上运行良好,您可以忽略这个特定的警告。

这似乎是相同的结论。

https://dev59.com/0msz5IYBdhLWcg3wADIm#8185946


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