9

这个 XAMLParseException 让我发疯!!我在 Visual Studio 1020 中使用 .NET 3.5 这是我的 xaml:

<Window x:Class="WinformsHost.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Advanced Notepad" Height="350" Width="525" Loaded="Window_Loaded">
<DockPanel>
    <Menu DockPanel.Dock="Top">

        <MenuItem Header="File">
            <MenuItem Header="_New" />
            <MenuItem Header="_Open..." />
            <MenuItem Header="_Save" />
            <MenuItem Header="S_ave As..." />
            <Separator />
            <MenuItem Header="Page Setup" />
            <MenuItem Header="Print" />
            <Separator />
            <MenuItem Header="Exit" />
        </MenuItem>

        <MenuItem Header="Edit">
            <MenuItem Header="Undo" />
            <MenuItem Header="Redo" />
            <Separator />
            <MenuItem Header="Cut" />
            <MenuItem Header="Copy" />
            <MenuItem Header="Paste" />
            <MenuItem Header="Delete"  />
            <Separator />
            <MenuItem Header="Time/Date" />
            <Separator />
            <MenuItem Header="Preferences" />
        </MenuItem>

        <MenuItem Header="Format">
            <MenuItem Header="Word Wrap" IsCheckable="True" />
            <MenuItem Header="Font..." />
        </MenuItem>

        <MenuItem Header="View">
            <MenuItem Header="Status Bar" IsCheckable="True" />
        </MenuItem>

        <MenuItem Header="Language">
            <RadioButton x:Name="rbtCmake" Checked="rbtCmake_Checked" Content="Cmake" />
            <RadioButton x:Name="rbtCSharp" Content="C#" />
            <RadioButton x:Name="rbtHTML" Content="HTML" />
            <RadioButton x:Name="rbtPython" Content="Python" />
            <Separator />
            <RadioButton x:Name="rbtText" IsChecked="True" Content="Text" />
        </MenuItem>

        <MenuItem Header="Help">
            <MenuItem Header="View Help" />
            <Separator />
            <MenuItem Header="About Notepad" />
        </MenuItem>

    </Menu>
    <StatusBar x:Name="stbStatus" DockPanel.Dock="Bottom" Visibility="Collapsed">
        <TextBlock x:Name="txtStatus" Text="Status" />
    </StatusBar>
</DockPanel>
</Window>

然后又可能是我的代码?这是一个例外:
System.Windows.Markup.XamlParseException was unhandled Message=Cannot create instance of 'MainWindow' defined in assembly 'Notepad, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Exception has been thrown by the target of an invocation. Error in markup file 'MainWindow.xaml' Line 1 Position 9. Source=PresentationFramework LineNumber=1 LinePosition=9 StackTrace: at System.Windows.Markup.XamlParseException.ThrowException(String message, Exception innerException, Int32 lineNumber, Int32 linePosition, Uri baseUri, XamlObjectIds currentXamlObjectIds, XamlObjectIds contextXamlObjectIds, Type objectType) at System.Windows.Markup.XamlParseException.ThrowException(ParserContext parserContext, Int32 lineNumber, Int32 linePosition, String message, Exception innerException) at System.Windows.Markup.BamlRecordReader.ThrowExceptionWithLine(String message, Exception innerException) at System.Windows.Markup.BamlRecordReader.CreateInstanceFromType(Type type, Int16 typeId, Boolean throwOnFail) at System.Windows.Markup.BamlRecordReader.GetElementAndFlags(BamlElementStartRecord bamlElementStartRecord, Object& element, ReaderFlags& flags, Type& delayCreatedType, Int16& delayCreatedTypeId) at System.Windows.Markup.BamlRecordReader.BaseReadElementStartRecord(BamlElementStartRecord bamlElementRecord) at System.Windows.Markup.BamlRecordReader.ReadElementStartRecord(BamlElementStartRecord bamlElementRecord) at System.Windows.Markup.BamlRecordReader.ReadRecord(BamlRecord bamlRecord) at System.Windows.Markup.BamlRecordReader.Read(Boolean singleRecord) at System.Windows.Markup.TreeBuilderBamlTranslator.ParseFragment() at System.Windows.Markup.TreeBuilder.Parse() at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream) at System.Windows.Application.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc) at System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties) at System.Windows.Application.DoStartup() at System.Windows.Application.<.ctor>b__0(Object unused) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler) at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler) at System.Windows.Threading.DispatcherOperation.InvokeImpl() at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state) at System.Threading.ExecutionContext.runTryCode(Object userData) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.ProcessQueue() at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler) at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler) at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter) at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame) at System.Windows.Threading.Dispatcher.Run() at System.Windows.Application.RunDispatcher(Object ignore) at System.Windows.Application.RunInternal(Window window) at System.Windows.Application.Run(Window window) at System.Windows.Application.Run() at WinformsHost.App.Main() in C:\Users\Mohit\Documents\Visual Studio 2010\Projects\Notepad\Notepad\obj\x86\Debug\App.g.cs:line 0 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException: System.Reflection.TargetInvocationException Message=Exception has been thrown by the target of an invocation. Source=mscorlib StackTrace: at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck) at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache) at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache) at System.Activator.CreateInstance(Type type, Boolean nonPublic) at System.Windows.Markup.BamlRecordReader.CreateInstanceFromType(Type type, Int16 typeId, Boolean throwOnFail) InnerException: NLog.Config.NLogConfigurationException Message=Exception occured when loading configuration from 'C:\Users\Mohit\Documents\Visual Studio 2010\Projects\Notepad\Notepad\bin\Debug\NLog.config' Source=NLog StackTrace: at NLog.Config.XmlLoggingConfiguration..ctor(String fileName, Boolean ignoreErrors) at NLog.Config.XmlLoggingConfiguration..ctor(String fileName) at NLog.LogFactory.get_Configuration() at NLog.LogFactory.GetLogger(LoggerCacheKey cacheKey) at NLog.LogFactory.GetLogger(String name) at NLog.LogManager.GetCurrentClassLogger() at WinformsHost.MainWindow..ctor() in C:\Users\Mohit\Documents\Visual Studio 2010\Projects\Notepad\Notepad\MainWindow.xaml.cs:line 15 InnerException: NLog.Config.NLogConfigurationException Message=Target console not found. Source=NLog StackTrace: at NLog.Config.XmlLoggingConfiguration.ConfigureRulesFromElement(LoggingConfiguration config, LoggingRuleCollection rules, XmlElement element) at NLog.Config.XmlLoggingConfiguration.ConfigureFromXmlElement(XmlElement configElement, String baseDirectory) at NLog.Config.XmlLoggingConfiguration.ConfigureFromFile(String fileName) at NLog.Config.XmlLoggingConfiguration..ctor(String fileName, Boolean ignoreErrors) InnerException:

4

3 回答 3

17

我不认为这真的是一个 XamlParseException:我认为它是一个 TargetInvocationException,它被包裹在一个 XamlParseException 中。看一下最终的内部异常:

NLog.Config.NLogConfigurationException Message=Exception 从“C:\Users\Mohit\Documents\Visual Studio 2010\Projects\Notepad\Notepad\bin\Debug\NLog.config”加载配置时发生

看起来您的配置文件很糟糕,可能是由于无效的 XML 或可能由于某些更具体的原因。

当您得到一个神秘的 XamlParseException 时,总是值得检查 InnerException 是否有 TargetInvocationException(如果有,则从那里钻取)。是的,这非常令人困惑和误导!

于 2010-01-11T01:53:23.223 回答
0

通过将引用的 dll 和配置文件包含在与 exe 文件相同的文件夹中解决了相同的问题。尝试单独运行 exe 将导致 Windows 级异常。

于 2018-01-19T18:23:38.413 回答
0

我知道这是一个老问题,但希望这会对某人有所帮助。

我有一个主窗口的属性,它是一个业务对象......所以当窗口初始化时,业务对象试图初始化......很好,但是数据访问层没有设置,因此它抛出了一个错误...... .

所以 c# 称它为 XML 解析错误,因为它发生得太早了……实际上它是在代码中抛出的。

于 2016-10-01T14:15:15.087 回答