缺少g.i.cs文件,类不再包含InitializeComponent

时间:2016-02-07 21:56:32

标签: c# xaml mvvm prism uwp

我在业余时间开发了一个UWP项目,以获得UWP,MVVM和Prism。该项目最初非常经典,没有使用MVVM和Prism,我一直在努力将这两个项目纳入项目。我一直依靠https://msdn.microsoft.com/en-us/library/gg405484(v=pandp.40).aspxhttps://msdn.microsoft.com/en-us/library/gg405494(v=pandp.40).aspxhttps://msdn.microsoft.com/en-us/library/ff921098(v=pandp.40).aspx来完成它。

一些背景:我最初有一个从我的Mainpage.xamlMainPage.xaml.cs代码隐藏的直接函数调用,但在转换到MVVM和单独的用户控件期间,我删除了该函数调用,以便稍后使用命令绑定。删除之后,我在GameRouletteView.g.i.cs中出现了一个错误,该错误是此删除的函数调用的残余,其中g.i.cs文件假定它仍然绑定。我重建了我的项目,那些g.i.cs文件显然被删除了。

我在Usercontrol View中添加了以下行,以便添加我的ViewModel:

xmlns:gameRoulette="using:GameRoulette.DesignViewModels"
xmlns:prism="using:Prism.Windows.Mvvm" 
d:DataContext="{d:DesignInstance gameRoulette:GameRouletteDesignViewModel, IsDesignTimeCreatable=True}"
prism:ViewModelLocator.AutoWireViewModel="True"

完整代码:

<UserControl
    x:Class="GameRoulette.Views.GameRouletteView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:GameRoulette.Views"
    xmlns:gameRoulette="using:GameRoulette.DesignViewModels"
    xmlns:prism="using:Prism.Windows.Mvvm" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="400"
    d:DataContext="{d:DesignInstance gameRoulette:GameRouletteDesignViewModel, IsDesignTimeCreatable=True}"
    prism:ViewModelLocator.AutoWireViewModel="True">
    <Grid Background="White">
        <Button x:Name="btnSelectGames" Content="Click here to select your games"
                HorizontalAlignment="Left" Margin="110,50,0,0"
                VerticalAlignment="Top" Height="40" Width="240"
                Click="{Binding SelectCommand}"/>
        <Button x:Name="btnChooseGame" Content=""
                HorizontalAlignment="Left" Margin="110,150,0,0"
                VerticalAlignment="Top" Width="240" Height="40"
                Click="{Binding ChooseCommand}" IsEnabled="True"/>
        <ProgressRing HorizontalAlignment="Left" Margin="200,100,0,0" 
                      VerticalAlignment="Top" RenderTransformOrigin="1.05,1.983"
                      Height="45" Width="45" IsActive="True" Visibility="{Binding }"/>
        <Image x:Name="imgFileIcon" HorizontalAlignment="Left"
               Height="64" Margin="110,224,0,0"
               VerticalAlignment="Top" Width="64" />
        <TextBlock x:Name="lblFileName" HorizontalAlignment="Left"
                   Margin="179,224,0,0" TextWrapping="Wrap"
                   Text="" VerticalAlignment="Top" Width="171" Height="64"/>
    </Grid>
</UserControl>

它出现以下错误:

The name "GameRouletteDesignViewModel" does not exist in the namespace "using:GameRoulette.DesignViewModels".

我重建了该项目,然后它为我的3个.xaml文件中的每个文件提供了以下错误:GameRouletteView, App.xamlMainPage.xaml

'GameRouletteView' does not contain a definition for 'InitializeComponent' and no extension method 'InitializeComponent' accepting a first argument of type 'GameRouletteView' could be found (are you missing a using directive or an assembly reference?)

此外,首次打开项目时,我收到了Intellisense错误:

[Failure] Could not find file 'C:\Users\username\Source\Repos\GameRoulette\GameRoulette\GameRoulette\obj\ARM\Debug\MainPage.g.i.cs'.
[Failure] Could not find file 'C:\Users\username\Source\Repos\GameRoulette\GameRoulette\GameRoulette\obj\ARM\Debug\Views\GameRouletteView.g.i.cs'.
[Failure] Could not find file 'C:\Users\username\Source\Repos\GameRoulette\GameRoulette\GameRoulette\obj\ARM\Debug\App.g.i.cs'.

我排除的事情:

  1. 我的命名空间是正确的;
  2. 我已经尝试https://stackoverflow.com/a/27260580/1770430,没有工作;
  3. 我删除了bin,obj文件夹和.suo文件,没有修复它;
  4. 我已关闭并重新打开解决方案,但没有修复它。
  5. 通过添加/修复/删除程序窗口修复Visual Studio,无结果。
  6. 我已经搜索了这个错误,但我找不到任何我尚未尝试过的东西。

    我还注意到我的NuGet软件包丢失了,我的软件包管理器控制台不再识别NuGet。我也收到了这个错误:

    Microsoft.NETCore.Portable.Compatibility 1.0.0 provides a compile-time reference assembly for mscorlib on UAP,Version=v10.0, but there is no run-time assembly compatible with win10.
    

    我觉得所有这些问题都是相关的,但我无法弄清楚它有什么问题。如上所述,Google并没有真正提供太多帮助,它提供的功能并不起作用。

    我使用Visual Studio 2015 Community Edition和Update 1.该项目可以在https://github.com/nzall/GameRoulette找到。

1 个答案:

答案 0 :(得分:3)

我已经在这个问题上苦苦挣扎了几天,至少在我的情况下,我很确定它依赖于我在我的xaml代码中无意中引入的一些微妙的错误。或者,更好,不完全是一个错误,但是我们所针对的平台的xaml版本不支持这些错误。在这种情况下,xaml解析器失败,并且g.i.cs文件(包含由解析器生成的页面和app类的一部分,包括InitializeComponent方法)不会按预期生成。 为什么我相信?

  1. 起初,我认为这是Visual Studio的一个问题,所以我清除了组件缓存,然后完全删除了文件夹C:\ Users {myname} \ AppData \ Local \ Microsoft \ VisualStudio \ 14.0,然后我卸载了然后从头开始重新安装VS.我仍然有错误。
  2. 当我尝试构建解决方案时,在错误窗口中我只看到一个通用的“对象引用没有设置为对象的实例”,但是如果我检查了构建输出窗口,我可以看到问题是有效的与xaml解析器相关(正是:Xaml内部错误WMC9999)。
  3. 互联网上关于这个问题并没有那么多,面对同样情况的人提供一些帮助请求的一部分,但我设法找到的只提供解决方案的两个页面都将这个问题与使用(不同)xaml中不支持的功能(语法正确但目标平台不支持的代码):see herehere
  4. 我终于设法通过撤消源代码控制存储库的最后更改来摆脱错误。不幸的是,我在代码中做了很多改动,所以我不能说在我的情况下导致问题的确切代码行是哪一行。但是这个故事的内容是每个证据都指出这是与我的xaml代码相关的事实。所以,当然,即使有人不能排除有时可能存在xaml解析器的主要系统问题,我会建议其他人首先面对这个问题,快速撤消最后的更改并查看是否存在问题消失。