Visual Studio 设计器无法加载

5
在我的应用程序中,我使用了ScintillaNET DLL,并创建了一个名为BufferedScintilla的类,该类继承了控件并对其进行了双缓冲处理。没有什么不寻常的,只是普通的C#继承...然后,我修改了我的窗体的Designer.cs文件,并从使用ScintillaNET.Scintilla()切换到了BufferedScintilla()。
应用程序按预期加载和正常工作,但Visual Studio 2013设计器无法加载,告诉我“无法将类型为BufferedScintilla的对象强制转换为类型ScintillaNET.Scintilla。”我尝试了一切,清理解决方案并重新构建,仅重新构建,调试,关闭和重新启动Visual Studio甚至重新启动电脑,但都没有任何帮助... Visual Studio Designer拒绝让我设计我的表单。
再次说明,应用程序运行良好,我确信表单上的控件是新的BufferedScintilla,而不是ScintillaNET.Scintilla,因为我可以看到效果(它是双缓冲的,我正在其上绘制的自定义图形不再闪烁),所以我100%确定应用程序使用了继承的组件。
我确定这是一些Visual Studio小缺陷,因此我正在寻找解决方案,让它再次让我设计我的应用程序。
编辑:为了澄清,Visual Studio 2013 Update 1和Visual Studio 2010中也会发生同样的情况。我检查了程序集,它是作为Any CPU构建的,因此在Visual Studio设计器中不应该有问题...
编辑:由于似乎无法修复这个问题(某种错误),因此我正在寻找一种在构建项目之前自动替换Designer.cs文件中的行的方法,然后在项目被构建之后(或未构建)。是否有任何Visual Studio工具可以在按下Build按钮之前自动替换类中的一些文本,并在构建项目之后进行替换?我想替换构造函数和声明,以便在设计时它是ScintillaNET.Scintilla,在运行时它是BufferedScintilla。谢谢!
提前致谢!
瓦利

你可能需要考虑的是,Visual Studio 是一个32位进程。如果你构建任何包含64位表单组件的库,Visual Studio 将无法加载并在设计器中使用它们。所有内容都将编译得很好,你可以引用64位库,但不能在设计器中使用它们。 - R M
是的,我也考虑过那个。不过很遗憾,这里并不是问题所在... - Valentin Radu
1个回答

3

我遇到了一个非常类似的问题,我的情况是设计师仍然使用为控件和窗体设置的构造函数和加载事件。在我的情况下,我正在使用一个在设计时间从未设置的变量,所以要解决这个问题,你需要修改你的代码来做这样的事情...

if(this.DesignMode)
{
    //DoSomething();
}
else
{
    //DoSomethingElse();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接