尝试将 xml 加载到数据集时仅出现 DesignTime 错误

Posted

技术标签:

【中文标题】尝试将 xml 加载到数据集时仅出现 DesignTime 错误【英文标题】:DesignTime only error when trying to load an xml to a dataset 【发布时间】:2013-06-22 16:21:36 【问题描述】:

我创建了一个产生此错误的简单 WPFApplication 项目

这是确切的错误:

找不到文件 'C:\Users\Andrei\AppData\Local\Microsoft\VisualStudio\11.0\Designer\ShadowCache\dj2szrx3.5nm\e412xqna.uj1\Locality.xml'。 E:\BugDemo2\BugDemo2\MainWindow.xaml 7 9 BugDemo2

MainWindow.xaml

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" x:Class="MainWindow"
    Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <!--This is the line that Visual Studio says it produce the error -->
        <local:MainWindowViewModel x:Key="MainWindowViewModelDataSource" d:IsDataSource="True"/>
    </Window.Resources>
    <Grid DataContext="Binding Source=StaticResource MainWindowViewModelDataSource"/>
</Window>

MainWindowViewModel.vb

Imports System.Data
Imports System.IO
Public Class MainWindowViewModel
    Shared ds As New DataSet("Locality")

    Public Sub New()
        MySub()
    End Sub

    Sub MySub()
        'this is the line that actually gives the error
        ds.ReadXml(
           Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly.Location) &
           "\Locality.xml")
        MsgBox(ds.Tables.Count)
    End Sub

End Class

我在 MainWindow.xaml.vb 后面的代码中没有任何内容

Class MainWindow
End Class

程序完全按照它应该做的事情,它正确地将 Locality.xml 加载到数据集并显示其中有多少表。 如果我将 ds 变量移动到另一个模块或另一个类中,作为共享属性,我会得到

Object reference not set to an instance of an object

也仅作为设计时错误。

我知道 Visual Studio 不知道 Locality.xml 是否存在,但它为什么会关心以及如何让这个错误消失?

【问题讨论】:

那么错误中这个文件的路径是正确的? 【参考方案1】:

使用保护代码,并且更易于调试,因为您可以在执行ReadXml之前检查变量:

Sub MySub()
    Dim path As String = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly.Location) &
       "\Locality.xml"
    If IO.File.Exists(path) Then
      ds.ReadXml(path)
      MsgBox(ds.Tables.Count)
    End If
End Sub

【讨论】:

这显然奏效了,我不敢相信我一直在做 If IsNothing(ds) then 之类的事情......但我没想到要检查实际文件。我觉得有点愚蠢,但至少我有一个解决方案。谢谢!

以上是关于尝试将 xml 加载到数据集时仅出现 DesignTime 错误的主要内容,如果未能解决你的问题,请参考以下文章

转储数据集时将数据从 Hive 加载到 Pig 错误

每次firebase实时数据库数据集时,RecyclerView都会重新加载

滚动大型数据集时,PyQt QTableView 速度非常慢

(spark-xml) 使用 from_xml 函数解析 xml 列时仅接收 null

SSIS Design6:利用数据流

数据表 - 如何在页面加载时仅加载一定数量的行?