WPF IOException找不到资源
我有一个WPF应用程序。
应用程序在MainWindow.xaml中运行时打开的页面,如App.xaml文件的StartupUri属性中设置的那样。 此页面打开罚款。
但是,如果我尝试使用Show或ShowDialog方法打开任何其他窗口,则会在InitializeComponent方法中出现“无法find资源”Window1.xaml(或任何文件被调用)的IOException。 这发生在我创build的每个窗口。 我在网上search,但所有的解决scheme似乎都说“确保App.xaml的StartupUri属性是正确的”,我的是,因此MainWindow开放。
任何想法发生了什么?
以上不适合我,但工作如下。 打开App.xaml
<Application x:Class="dotDiff2013.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml"> <Application.Resources> </Application.Resources> </Application>
然后,您需要将启动URI更改为完全限定的URI。 在我的情况下,我已经将我的MainWindow.xaml
移动到一个名为“Main”的文件夹,所以将上面的URI改为
StartupUri="Main/MainWindow.xaml"
解决了我的问题。
当项目设置中的“AssemblyName”和“Default Namespace”具有相同的值时,我遇到了这个问题。 改变AssemblyName到别的东西解决了这个问题。
我遇到过同样的问题。 原因是因为我移动了MainWindow.xaml而没有调整App.xaml。 如果您将MainWindow.xaml移动到名为“UI”的文件夹中,则必须调整App.xaml中的以下行
StartupUri="UI/Mainwindow.xaml"
如果打开Window1.xaml文件的代码隐藏(即Window1.xaml.cs),可以右键单击InitializeComponent方法调用并select“Goto Definition”。 将会有如下代码:
/// <summary> /// InitializeComponent /// </summary> [System.Diagnostics.DebuggerNonUserCodeAttribute()] public void InitializeComponent() { if (_contentLoaded) { return; } _contentLoaded = true; System.Uri resourceLocater = new System.Uri("/TestApp;component/mainwindow.xaml", System.UriKind.Relative); #line 1 "..\..\..\MainWindow.xaml" System.Windows.Application.LoadComponent(this, resourceLocater); #line default #line hidden }
如果在上面的代码中的Uri不正确,那么你会收到你得到的错误。
另外,如果XAML文件的Build Action没有设置为“Page”,那么你也会遇到这个问题。 要检查这一点,您可以在解决scheme资源pipe理器中select该文件,然后按F4键。
最后,如果将某个XAML文件重命名为构build过程的一部分(如混淆),那么您将再次收到该错误。
除此之外,我会尝试一个“清洁解决scheme”和“重build解决scheme”,以确保具有InitializeComponent定义的文件被重build。
<Application x:Class="RuleSetEditor.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="/Forms/RuleEditor.xaml"> <Application.Resources> </Application.Resources> </Application>
这里/ Forms /是我的项目中的文件夹结构。 确保这是在app.xaml中提到的
这个IOException
可能是由程序集名不明确性造成的。 例如,我命名了一个程序集myproduct.dll
,然后在WPF应用程序myproduct.exe中添加了对它的引用。 这给了mainwindow.xaml
IOException
。
另外,如果您碰巧在您的app.xaml.cs中覆盖了OnStartup(StartupEventArgs e)
,则还必须从app.xaml中删除行StartUri="mainwindow.xaml"
。 否则,在这种情况下,您将得到“无法find资源”MainWindow1.xaml“”。
即使我有同样的问题,首先我继续挖掘问题仍然是指向InitializeComponent();
我终于发现,我更新了Resources.resx
文件的内容,但在我的应用程序文件夹中,我没有更新它。 所以以后复制新的resx文件并且尝试了它。 现在它工作正常。
只要有人在这个问题来看这个一次。
确保你没有意外地移动文件MainWindow.xaml
Mine有不知何故被拖入Views
错误 – 哎呀
在这里看到我的分析。 有解释,发生了什么,也有解决方法: http ://connect.microsoft.com/VisualStudio/feedback/details/759432(“无法find资源app.xaml”崩溃(WPF项目)的分析“)
检查App.xaml
的StartupUri
标记(如果您移动了MainWindow
)。
find文件app.g.cs
并在记事本中编辑它,在Visual Studio中,它会要求您重新加载文件,单击确定,瞧
同样的问题,但又一个解决scheme
对我来说,我的程序集名称和默认名称空间是相同的, 但不同于项目名称 。 我实际上更新了默认名称空间和程序集名称以匹配新的项目名称,并修复了它。
我在本地化应用程序后发现了这个问题。 我结束了一个卫星资源,我没有包括在我的安装程序脚本。 所以,虽然它在Visual Studio中工作,分别build立安装程序导致此问题。
包括卫星DLL的伎俩。