【发布时间】:2014-05-23 08:08:06
【问题描述】:
在我的应用程序中,我使用 ScintillaNET DLL 并创建了一个名为 BufferedScintilla 的类,我在其中继承了控件并对其进行双缓冲。没有什么不寻常的,只是正常的 C# 继承......然后,我修改了表单的 Designer.cs 文件并从使用 ScintillaNET.Scintilla() 切换到 BufferedScintilla()。
应用程序按预期加载并正常工作,但 Visual Studio 2013 设计器无法加载,告诉我“无法将 BufferedScintilla 类型的对象转换为 ScintillaNET.Scintilla 类型。 我尝试了一切,清理了解决方案并重建,仅重建,调试,关闭并重新启动 Visual Studio,甚至重新启动 PC,但没有任何帮助...... 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 位库,只是不要在设计器中使用它们。
-
是的,我也考虑过。不幸的是,这不是这里的问题......
标签: c# casting visual-studio-2013 designer scintilla