Visual Studio 设计器无法加载

Val*_*adu 5 c# casting designer scintilla visual-studio-2013

在我的应用程序中,我使用 ScintillaNET DLL 并创建了一个名为 BufferedScintilla 的类,我在其中继承控件并对其进行双缓冲。没有什么不寻常的,只是正常的 C# 继承...然后,我修改了表单的 Designer.cs 文件,并从使用 ScintillaNET.Scintilla() 切换到 BufferedScintilla()。

该应用程序按预期加载并正常工作,但 Visual Studio 2013 设计器无法加载,告诉我“无法将 BufferedScintilla 类型的对象转换为 ScintillaNET.Scintilla 类型。我尝试了一切,清理了解决方案并重建,仅重建,调试,关闭并重新启动 Visual Studio,甚至重新启动 PC,但没有任何帮助... Visual Studio 设计器拒绝让我设计我的表单。

再次,该应用程序运行良好,并且我确信表单上的控件是新的 BufferedScintilla,而不是 ScintillaNET.Scintilla,因为我可以看到效果(它是双缓冲的,我在其上绘制的自定义图形不会闪烁)不再),所以我 100% 确定该应用程序与继承的组件一起运行。

我确信这是 Visual Studio 的某种小缺陷,所以我正在寻找一种解决方案,让它让我再次设计我的应用程序。

编辑:为了澄清,同样的事情也发生在 Visual Studio 2013 Update 1 和 Visual Studio 2010 中。我检查了程序集,它是作为任何CPU构建的,所以Visual Studio设计器应该没有问题......

编辑:由于似乎不可能修复此问题(某种错误),因此我期待一种在构建项目之前以及在构建项目之后(或不构建)自动替换 Designer.cs 文件中的行的方法。是否有任何 Visual Studio 工具可以在项目构建之前和构建之后按下“构建”按钮后自动替换类中的某些文本?我想替换构造函数和声明,以便在设计时它是ScintillaNET.Scintilla,在运行时它是BufferedScintilla。谢谢!

提前致谢!

瓦利

小智 3

我遇到了与此非常相似的问题,在我的例子中,设计器仍然使用为控件和表单设置的构造函数和加载事件。就我而言,我使用的变量在设计时从未设置过,所以要解决这个问题,您必须修改代码才能执行类似的操作...

if(this.DesignMode)
{
    //DoSomething();
}
else
{
    //DoSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)