有没有人在开发控件时找到了解决DesignMode问题的有用方法?
问题是,如果嵌套控件,则DesignMode仅适用于第一级.第二级和更低级别的DesignMode将始终返回FALSE.
标准的hack一直在查看正在运行的进程的名称,如果它是"DevEnv.EXE"那么它必须是studio,因此DesignMode真的是真的.
问题是寻找ProcessName通过注册表和其他奇怪的部分工作,最终结果是用户可能没有查看进程名称所需的权限.另外这条奇怪的路线很慢.所以我们不得不堆积额外的黑客来使用单例,如果在请求进程名称时抛出错误,则假设DesignMode为FALSE.
确定DesignMode的一个很好的干净方法是有序的.让微软在框架内部修复它会更好!
我正在使用Visual Studio 2010处理WPF应用程序Telerik.
每次我使用设计器时,我一直在处理很多崩溃:点击一个元素,改变它的位置,甚至改变它的名字都会导致崩溃,并显示以下异常:
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)
[...]
Run Code Online (Sandbox Code Playgroud)
我尝试了以下事项:
这些尝试都没有奏效.
今天早上,我注意到设计师根本没有崩溃,我明白了原因:设计师在我打开或编辑XAML时崩溃了.
打开XAML后,Visual Studio开始冻结,每次我尝试点击某些内容时设计器都会崩溃.如果我关闭Visual Studio并构建解决方案(不打开XAML),一切都可以正常使用设计器.
我的猜测是,当Visual Studio试图将XAML代码 "转换" 为设计器中的图形元素时,出现问题,并且仅在该方向上.
问题:你有没有尝试过这种事情?您是否知道为什么修改XAML会导致崩溃以及如何解决?
先感谢您.
ArgumentNullException是GetRuntimeTime.我已经能够看到.NET代码,但我无法确定问题的根源.请参阅下面的完整堆栈跟踪:
此外,这是发生错误的确切行和异常详细信息.请注意,该文件是VSIsolationProviderService.cs,并且我能够看到源代码,这要归功于.NET Reflector Object Browser.

Message=Value cannot be null.
Source=mscorlib
StackTrace:
to System.RuntimeType.MakeGenericType(Type[] instantiation)
InnerException: …Run Code Online (Sandbox Code Playgroud) 正如标题所暗示的那样,设计者抛出了这个错误,这意味着设计师无法正确显示我的UserControl,这反过来意味着我无法在此UserControl中从元素到元素平滑导航以进行修改.真烦人
XXX是我的UserControl的名称,而URI YYY实际上是XXX的路径.所以我不明白它不能发现自己是资源.我搜索了这个错误,但大多数都发生在运行时.在我的情况下,当我执行它时根本不会发生.这个错误的描述真的不够解释,因为我不确定CLR中谁将文件本身作为资源加载.
另一件值得一提的是,这个错误只发生在我构建我的应用程序项目后,UserControl所在的错误.在我点击清理项目之后,设计师可以显示整个东西(但显然我无法清理因为建筑需要时间,所以在我做任何改变之前的每次项目)
我有一个WPF音频应用程序.
偶尔(甚至在调试器中)我看到一个NullReferenceException没有堆栈跟踪信息.
如何开始调试这样的问题?
一些背景:
我是P/Invoking函数,WinMM.dll其中涉及在调用时注册回调waveOutOpen
[DllImport("winmm.dll")]
public static extern MmResult waveOutOpen(out IntPtr phwo, IntPtr uDeviceID, WaveFmt pwfx, WaveCallbk dwCallback, IntPtr dwInstance, int fdwOpen);
Run Code Online (Sandbox Code Playgroud)
事实证明这很难稳定,尤其是在我打电话的时候waveOutClose,并立即waveOutOpen再次调用(通常是改变输出格式).
我怀疑这个问题可能与我上面描述的调用有关(尽管知识很少,我可能完全偏离目标).
重现问题目前证明是难以捉摸的,尽管我可以为一直看到这个问题的用户提供构建.我可能会尝试加快导致问题的操作,以便在调试器中重现问题更加确定.
关于调试器,我没有修改任何设置(包括Enable unmanaged code debugging)或任何Debug -> Exceptions...设置.说实话,我对这里提供的内容毫无头绪,所以任何提示都是受欢迎的.
异常怎么可能没有堆栈跟踪?你以前见过这个吗?救命!