WPF IOException无法找到资源

问题描述 投票:46回答:16

我有一个WPF应用程序。

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

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

知道发生了什么事吗?

c# wpf ioexception
16个回答
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移动到名为“Main”的文件夹,因此将上面的URI更改为

StartupUri="Main/MainWindow.xaml"

解决了我的问题。


1
投票

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

只是任何人遇到这个问题都会看一次这个问题。


1
投票

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

改变创业公司Uri enter image description here

如果Xaml在任何文件夹中,您可以添加如下

的StartupUri = “查看/ MyView.xaml”


0
投票

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


0
投票

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


0
投票

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

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


0
投票

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

包括卫星dll就可以了。


-1
投票

只需转到Build然后“Rebuild”和“Clean”


12
投票

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


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定义的文件。


9
投票

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

         StartupUri="UI/Mainwindow.xaml"

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>

here / Forms /是我项目中的文件夹结构。确保在app.xaml中提到了这一点


2
投票

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


1
投票

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


1
投票

检查App.xaml StartupUri标签(如果你移动了MainWindow)。


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.