繁体   English   中英

编辑XAML导致Visual Studio的Designer崩溃

[英]Editing XAML leads Visual Studio's Designer to crash

原始问题


我正在使用Telerik使用Visual Studio 2010开发WPF应用程序。

每次我使用设计器时,我一直在处理很多崩溃:点击一个元素,改变它的位置,甚至改变它的名字都会导致崩溃 ,并显示以下异常:

System.ArgumentNullException
Value cannot be null.
   to System.RuntimeType.MakeGenericType(Type[] instantiation)
   to Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkUtil.GetRuntimeType(Type type)
   to Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkType.TryGetRuntimeType()
   to Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkUtil.EnsureRuntimeType(Type type)
   to Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkProvider.GetRuntimeType(Type reflectionType)
[...]

我尝试了以下事项:

  • 卸载并重新安装Telerik;
  • 卸载并重新安装.NET 4.0;
  • 卸载并重新安装Visual Studio。

这些尝试都没有奏效。

今天早上,我注意到设计师根本没有崩溃,我明白了原因:设计师在我打开或编辑XAML时崩溃了。

打开XAML后,Visual Studio开始冻结,每次我尝试点击某些内容时设计器都会崩溃。 如果我关闭Visual Studio并构建解决方案( 不打开XAML ),一切都可以正常使用设计器。

我的猜测是,当Visual Studio试图将XAML代码 “转换” 为设计器中的图形元素时,出现问题 ,并且仅在该方向上。


问题 :你有没有尝试过这种事情? 您是否知道为什么修改XAML会导致崩溃以及如何解决?

先感谢您。


阅读答案后做了新的尝试

  • 在设计器打开时调试Visual Studio实例本身。 导致ArgumentNullException的方法是GetRuntimeTime 我已经能够看到.NET代码,但我无法确定问题的根源。 请参阅下面的完整堆栈跟踪:

在此输入图像描述

此外,这是发生错误的确切行和异常详细信息。 请注意,该文件是VSIsolationProviderService.cs并且由于.NET Reflector Object Browser ,我能够看到源代码。

在此输入图像描述

  Message=Value cannot be null.
  Source=mscorlib
  StackTrace:
       to System.RuntimeType.MakeGenericType(Type[] instantiation)
  InnerException: null

最后,Exception时出现的Local Variables检查器显示以下对象:

在此输入图像描述

对象结束:

在此输入图像描述

评论的答案:

  • 发生异常的行的this._targetFrameworkProvider的值如下所示。 在此输入图像描述

我猜,你最好的办法是调试Visual Studio!

  • 运行Visual Studio(实例#1)并加载您的解决方案
  • 运行Visual Studio的第二个实例(#2)
  • 从实例#2开始,调试 - >附加到进程 - >选择devenv.exe(实例#1,确保选择托管调试)
  • 然后选择Debug-> Exception,按“Find ..”并搜索System.ArgumentNull然后选中“Thrown”
  • 转到实例#1,在设计器中加载视图,这应该在实例#2中触发断点,它应该显示完整的堆栈跟踪。 此信息应足以识别有问题的控件/组件。

我相信您看到的问题与您正在使用的控件之一有关。

让我首先向您展示一种再现这个问题的方法; 如果你看到同样的问题。 (我使用VS 2013处理这个问题比2010年好一点)

首先,我创建了一个自定义控件,它是一个TextBox; 我的代码看起来像这样。

public class CustomTextBox : TextBox
{
    public string testText { get; set; }

    public CustomTextBox()
        : base()
    {
        if (string.IsNullOrEmpty(testText))
        {
            throw new ArgumentNullException();
        }
    }
}

然后我把这个控件放到了xaml中

<Grid>
    <local:CustomTextBox/>
</Grid>

当控件调用它的构造函数时,我所做的就是在属性为null时抛出一个异常(当设计者尝试将其新建并渲染时,它将在设计器中执行)。

在VS2013中,我只是在XAML本身的控件下面有一条红线,但是根据VS2010的过去经验,这个问题确实导致设计师倒闭。

我建议你做的是,在没有设计师的情况下通过XAML,一次取出任何第三方/自定义控件。 其中一个控件可能会抛出异常,从而产生您所看到的内容。 如果是其中一个Telerik控件,则可以选择联系他们。

正如Gavin先前所说,尝试找到问题的控制。

如果右键单击.xaml文件,选择Open With并选择Source Code (Text) Editor仍然可以编辑VS中的文件。

如果您希望将其设置为大量文件,则可以将其设置为默认值,并在完成后将其切换为默认值。

此解决方案将打开.xaml文件而不使用设计器,但使用(某些)intellisense。

此外,我在某处读到,如果你以管理员身份启动vs它会给你带来问题,请尝试启动Visual Studio而不是管理员

阅读本文 ,您可以尝试几个随机的东西..

您可以尝试使用XAMLPAD来测试XAML页面。

参考: https//msdn.microsoft.com/en-us/library/vstudio/ms742398(v = vs。90).aspx

希望这对你有所帮助。

如果您认为它可能与您正在使用的组件有关,则可能需要尝试调试Visual Studio设计模式并查看抛出ArgumentNullException情况,或者至少在抛出异常时获取CallStack。

请参阅此链接: 如何解决和调试Visual Studio设计模式错误?

我个人使用Blend实例和一个Visual Studio实例而不是两个Visual Studio实例。

我还会尝试从一个没有任何外部依赖项的完整新项目来查看它是否与您的Visual Studio安装相关

VS2010打破某些XAML是一个众所周知的问题。

您是否尝试将此代码添加到违规控件的加载事件中?

if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) { return; }

导致VS 2010 SP1 WPF设计器崩溃的原因是什么?

尝试使用typeof(Type)as初始化runtimeType对象

Type runtimeType = typeof(Type)

还要在调试期间在监视中评估变量reflectionType,this,this._targetFrameworkProvider and this._targetFrameworkProvider.GetRunTimeType(reflectionType)的值。

这可能对你有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM