wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了.net – 在WPF中实例化用户控件时PresentationFramework.dll中的System.IO.IOException大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有一个用户控件UserControl,它位于程序集Assembly中.我有一个 WPF应用程序,它以编程方式实例化UserControl.我已经添加了对Assembly的引用.但是,在运行时我得到了ff.例外: Cannot locate resource 'usercontrol.xaml'. at MS.Internal.AppModel.ResourcePart.GetStreamC
我有一个用户控件UserControl,它位于程序集Assembly中.我有一个 WPF应用程序,它以编程方式实例化UserControl.我已经添加了对Assembly的引用.但是,在运行时我得到了ff.例外:

Cannot locate resource 'usercontrol.xaml'.
   at MS.Internal.AppModel.ResourcePart.GetStreamCore(FileMode mode,FileAccess access)
   at System.IO.Packaging.PackagePart.GetStream(FileMode mode,FileAccess access)
   at System.IO.Packaging.PackagePart.GetStream()
   at System.Windows.Application.LoadComponent(Object component,Uri resourceLocator)
   ...

我将UserControl.xaml的构建操作更改为EmbeddedResource,但这会导致编译问题,因此我将其恢复为认的页面设置.我在.NET 3和4中尝试过这一点无济于事.任何人都有任何想法?

解决方法

最常见的原因是重命名程序集.我将解释这种情况,然后给出其他一些可能性.

假设您有一个包含UserControl“MyControl”的DLL项目“Abc”.在Abc.dll中为MyControl生成的InitializeComponent将包含Uri“/Abc;Component/MyControl.xaml”.

在运行时,将提取程序集名称“Abc”,并按该名称搜索已加载的程序集以获取程序集.如果找到这样的程序集但它没有“MyControl.xaml”资源,则会收到您在问题中发布的错误.

所以这是场景:

>您将Abc.dll文件重命名为Def.dll
>您(或某人)创建了一个不同的Abc.dll文件
>在您的项目中,您引用Def.dll(编译为Abc.dll)
>您的项目也直接或间接引用Abc.dll,以便在实例化MyControl时加载它

现在,当您从Def.dll实例化MyControl时,它会在Abc.dll程序集中查找其xaml而不是Def.dll程序集.

可能发生这种情况的其他一些情况:

>您的obj目录中有一个陈旧的.g.cs文件,该文件的xaml文件名称错误.如果您更改源代码而不更新日期(这可能发生在从源控制系统签出或解压缩zip文件或许多其他方式时),则会发生这种情况.清理和重建解决方案将解决这个问题.由于您的评论说您试过这个,这不适用于您.
>编译后,您将手动编辑.dll文件中的资源名称
>您已经加载了两个具有相同名称的程序集(是的,这是可能的),并且资源加载程序找到了错误的程序集

请注意,如果.g.cs文件与资源中的路径不匹配,对XAML文件路径的任何更改(如重命名或移动它)都可能导致此问题.

为了进一步诊断您的问题,我建议您下载NET Reflector的副本并查看您的.dll文件以查看:

> InitializeComponent()指定的Uri是什么?
>是否有一个同名的.baml文件

您还可以在抛出异常的位置检查调用堆栈,以确保正在使用的资源管理器具有对预期程序集的引用,而不是其他程序集.

大佬总结

以上是大佬教程为你收集整理的.net – 在WPF中实例化用户控件时PresentationFramework.dll中的System.IO.IOException全部内容,希望文章能够帮你解决.net – 在WPF中实例化用户控件时PresentationFramework.dll中的System.IO.IOException所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: