在修改app.xaml之前找不到'app.xaml',IOException

时间:2012-12-08 19:22:22

标签: c# wpf visual-studio-2010

基本上我遇到了与此(未答复)问题相同的问题:IOException was unhandled - Cannot locate resource app.xaml

当我在Visual Studio 2010中打开我的项目并开始调试时,我得到“IOException未处理:找不到资源app.xaml”。重建解决方案不起作用,我必须以某种方式修改我的app.xaml文件(例如添加一个空行),以便成功运行我的项目。

其他详情:

  • 我的解决方案包含两个项目:My main(WPF)应用程序和测试项目。
  • 如果解决方案是从Visual Studio 2005转换而来,我已经阅读了有关问题。这是我的情况。我的项目最初是使用Visual Studio 2010创建的。也许(我没有完全提醒)它曾经是针对.Net Framework 3.5或.Net Framework 4.0 Client Profile,但它目前配置为与.Net Framework 4.0一起使用
  • 如果重要的话,两个项目都有不同的名称。第一个名为MyApplicationName(程序集名称和默认名称空间),第二个名为MyApplicationName.Test(程序集名称和默认名称空间)
  • 我的主项目中的大多数课程都是内部的(包括View课程),但我的App课程是公开的
  • 主项目将其内部组件公开给测试项目(使用[assembly: InternalsVisibleTo("MyOtherProject")]
  • 我正在使用MVVM(使用MVVM Light),但我没有使用ViewModel'解析器'/ container / bootstrapper / MEF或相关的东西。我只是使用DataTemplates将我的ViewModel映射到各自的视图,并手动创建我的ViewModels(如果这很重要)。
  • 我的App.xaml包含其他三个xaml资源文件。我在这里包括我的App.xaml:

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/StyleDictionary.xaml" />
                <ResourceDictionary Source="Resources/CommonResources.xaml" />
                <ResourceDictionary Source="Resources/ViewModelMappings.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    

  • 如果重要的话,我会从我的App类重写OnStartup方法来手动处理启动逻辑。我还在那里写了一个静态构造函数来从MVVM Light初始化DispatcherHelper:

        public partial class App : Application
        {
            static App()
            {
               GalaSoft.MvvmLight.Threading.DispatcherHelper.Initialize();
            }
            ...
        }
    

任何帮助将不胜感激。如果您需要更多详细信息,请告诉我。

2 个答案:

答案 0 :(得分:0)

当您更改项目的目标框架时,可能会发生这样的事情。您可以将项目重新创建为从一开始就以.Net 4为目标的新应用程序,并将所有代码文件添加为现有项目。

我想到的另一件事是app.xaml文件名的大小写。它可能在某些情况下区分大小写,而在其他情况下不区分大小写,所以您是否尝试过更改它?在我的系统上,默认情况下它是App.xaml。由于在错误消息中它是app.xaml,因此在使用文本编辑器对项目文件进行区分大小写搜索并将名称的所有出现更改为App.xaml时,可能是值得的。

答案 1 :(得分:0)

我不知道这是否是一个明确的解决方案,但它似乎到目前为止工作:

  1. 使用记事本
  2. 打开csproj文件
  3. 搜索App.xaml和App.xaml.cs.确保对此文件的每个引用都具有相同的大小写。这些文件名为App.xaml和App.xaml.cs,因此我保留了这样的引用。
  4. 以前我有这样的事情:

    <Compile Include="app.xaml.cs">
      <DependentUpon>App.xaml</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    

    所以我修改了它,现在是:

    <Compile Include="App.xaml.cs">
      <DependentUpon>App.xaml</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    

    我做的另一件事是寻找BootstrapperPackage并从那里删除旧版本的.Net Framework,但我不认为如果你的项目使用依赖旧版本.Net的库是个好主意。我不确定是不是也导致了这个问题。