WPF IOException无法找到资源

时间:2011-06-29 09:40:32

标签: c# wpf ioexception

我有一个WPF应用程序。

应用程序在MainWindow.xaml中运行时打开的页面,在App.xaml文件的StartupUri属性中设置。这个页面打开正常。

但是,如果我尝试使用Show或ShowDialog方法打开任何其他窗口,我会在InitializeComponent方法中获得一个IOException,说“找不到资源'Window1.xaml'”(或者调用任何文件)。我创建的每个窗口都会发生这种情况。我在网上搜索但是所有的解决方案似乎都说“确保App.xaml的StartupUri属性是正确的”而且我的是,因此MainWindow打开了。

知道发生了什么事吗?

19 个答案:

答案 0 :(得分:59)

上述内容对我不起作用,但工作原理如下。打开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移至名为&#39; Main&#39;的文件夹,因此将上述URI更改为

StartupUri="Main/MainWindow.xaml"

解决了我的问题。

答案 1 :(得分:12)

当项目设置中的“AssemblyName”和“Default Namespace”具有相同的值时,我遇到了这个问题。将AssemblyName更改为其他内容可以解决问题。

答案 2 :(得分:9)

如果打开Window1.xaml文件(即Window1.xaml.cs)的代码隐藏,则可以右键单击InitializeComponent方法调用并选择“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”,那么您也会遇到此问题。要检查此项,您可以在解决方案资源管理器中选择该文件,然后按F4。

最后,如果某些内容将XAML文件重命名为构建过程的一部分(例如混淆),那么您将再次收到该错误。

除此之外,我会尝试“Clean Solution”和“Rebuild Solution”来确保重建具有InitializeComponent定义的文件。

答案 3 :(得分:9)

我有同样的问题。我的原因是因为我在不调整App.xaml的情况下移动了MainWindow.xaml。如果您将MainWindow.xaml移动到名为“UI”的文件夹中,则必须调整App.xaml中的以下行

         StartupUri="UI/Mainwindow.xaml"

答案 4 :(得分:3)

<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

中提到了这一点

答案 5 :(得分:2)

IOException可能是由程序集名称歧义引起的。例如,我命名了一个程序集myproduct.dll,然后在WPF应用程序myproduct.exe中添加了对它的引用。这为IOException提供了mainwindow.xaml

答案 6 :(得分:1)

签入App.xaml StartupUri代码(如果您移动了MainWindow)。

答案 7 :(得分:1)

请参阅我的分析。有解释,发生了什么,也有解决方法: http://connect.microsoft.com/VisualStudio/feedback/details/759432 (“分析”无法找到资源app.xaml“崩溃(WPF项目)”)

答案 8 :(得分:1)

此外,如果您碰巧覆盖app.xaml.cs中的OnStartup(StartupEventArgs e),则还必须从app.xaml中删除行StartUri="mainwindow.xaml"。 否则,在这种情况下,您将获得“无法找到资源'MainWindow1.xaml'”。

答案 9 :(得分:1)

即使我有同样的问题,首先我继续挖掘问题仍然指向InitializeComponent();我终于发现我更新了Resources.resx文件内容,但在我的应用程序文件夹中我做了没有更新它。 所以后来复制了新的 resx 文件并尝试了。现在它工作正常。

只要有人遇到这个问题,请看一次。

答案 10 :(得分:1)

要解决此问题,请转到App.Xaml并更改要在应用程序运行时运行的StsrtUpUri。 enter image description here

更改启动Uri enter image description here

如果Xaml位于任何文件夹中,则可以添加如下内容

StartupUri =“ View / MyView.xaml”

答案 11 :(得分:0)

确保您没有意外移动文件MainWindow.xaml 我的某种方式被错误拖入了Views - 哎呀

答案 12 :(得分:0)

找到文件app.g.cs并在记事本中编辑它,在Visual Studio中它将要求您重新加载文件,单击确定并瞧

答案 13 :(得分:0)

同样的问题,但另一个解决方案:

对我来说,我的程序集名称和默认名称空间与相同,但与项目名称不同。我实际上更新了默认命名空间和程序集名称以匹配新项目名称并修复了它。

答案 14 :(得分:0)

我在定位应用程序后发现了这个问题。我最终获得了一个卫星资源,我没有将其包含在我的安装程序脚本中。因此,虽然它在Visual Studio中有效,但单独构建安装程序会导致此问题。

包括卫星dll就可以了。

答案 15 :(得分:0)

如果这可以帮助任何人,那么我面临的问题是资源路径中没有任何明显的问题。一件事是我在WPF控制库中使用它,然后主应用程序程序集引用了该库。

随着一切开始正常工作,我只是将简单的URL(即文件名)更改为pack:// URI。像这样:

Source="pack://application:,,,/MyLib;component/SettingsPage.xaml"

代替:

Source="SettingsPage.xaml"

答案 16 :(得分:0)

您可能已在全局(整个项目/解决方案等)或本地重命名了名称空间,但是您的解决方案obj \ Debug文件夹中的某些内容(xaml类,以[original_xaml_file_name] .g.i.cs结尾)没有进行更改。下次,如果您遇到这种情况,请确保选择“整个解决方案(包括外部项目)”。

答案 17 :(得分:0)

我的问题很简单: 我的文件的构建操作设置为“无”。

如果您没有将其设置为“资源”,这将是例外。

答案 18 :(得分:-1)

只需转到“构建”,然后“重建”并“清理”