如何在C#项目中使用Scintilla .NET?

41

我正在尝试在项目中使用Scintilla .NET(我想要一个好的编辑器+语法高亮等)。不幸的是,当我在项目中引用二进制文件时,似乎无法真正使用Scintilla控件,我遇到了两个不同的错误。

  1. 第一个错误发生在将SciLexer.dll添加为项目引用时。我收到了一条消息,说:无法添加对SciLexer.dll的引用。请确保文件可访问,并且它是一个有效的程序集或COM组件。

  2. 第二个错误发生在我尝试使用ScintillaNET.dll中的控件时。如果我尝试将组件拖入表单中,我会收到以下消息:无法创建组件Scintilla。错误消息如下:System.ComponentModel.Win32Exception: %1 不是有效的 Win32 应用程序,位于 ScintillaNet.Scintilla.get_CreateParams()

任何有关这些问题的帮助将不胜感激。记录一下,我正在运行Visual Studio 2008,运行在64位Windows 7平台上。

谢谢。


8
你考虑看看其他替代方案吗?我很喜欢ICSharp.TextEditor,它是SharpDevelop的一部分,这是一个针对.NET开发的免费IDE。这个编辑器非常强大,完全由C#代码编写,在32位和64位系统上运行得非常顺畅 - "它只是工作"。在这里获取它:http://www.icsharpcode.net/OpenSource/SD/Default.aspx,并从庞大的解决方案中获取ICSharpCode.TextEditor子项目。 - marc_s
5个回答

28

我已经有一段时间没有使用Scintilla了,但我的理解是SciLexer.dll是完全本地的DLL,这就是为什么你无法从Visual Studio中添加对它的引用。

相反,您应该“安排”SciLexer.dll在运行时出现在正确的目录中,以便ScintillaNET.dll可以加载它。最安全的方法是将SciLexer.dll作为普通文件添加到您的Visual Studio项目中(而不是作为引用),然后更改文件属性以在构建项目时将其复制到输出目录。

考虑到您正在64位系统上,我预计您需要专门将您的应用程序构建为32位而非AnyCPU。正如我所说,我已经有一段时间没有这样做了,但当我这样做时,Scintilla只有32位的二进制文件。


好的观点 - 将其复制到输出目录可以解决运行时的问题,但这并不能帮助 Visual Studio。也许最终我是将其放在了路径中。 :) - Tim Robinson
对于Visual Studio设置项目,您还必须将“文件”添加到输出中,因为仅通过客户端项目复制到输出文件夹,项目输出组件将无法拉取SciLexer.dll。 - Shiv

3

我通过将文件复制到 C:\Windows\SysWOW64 来解决了这个问题。

从 @weston 的帖子中得到的灵感。


1
一般来说,这可能不适用于客户端安装(最佳安全实践是在同一台机器上安装多个版本 - 例如,您不能使用此策略安装两个不同的版本)。 - Shiv
SciLexer.dllSciLLexer64.dll 复制到 PATH 指定的文件夹之一,这样问题就解决了。这样做后,VS 2019 能够成功加载设计器。 - Pierre Arnaud

2

这是给阅读你的帖子的任何人,丹。如果你(他们)在使用ScintillaNET编辑器控件时遇到自动滚动的问题,请参考此帖:http://stackoverflow.com/questions/2898722/how-make-autoscroll-in-scintilla/33172398#33172398 - Robert Oschler

0

enter image description here

点击运行并选择“我的电脑”,右键单击“我的电脑”,进入属性,然后点击“高级系统设置”。

之后选择“高级”并点击“环境变量”。

在这里我们可以添加值和路径。

值:任何你喜欢的值,例如:Scintilla

值路径:下载的dll所在的位置。例如:D:\prathap\DLL\

下载路径:https://scintillanet.codeplex.com/releases

从屏幕右侧选择要下载的内容。

然后在应用程序中将Scintill Dll作为引用和其他2个dll作为现有文件添加。

右键单击项目ADD--Addexisting files--然后从本地系统选择文件,并确保您将2个文件“复制到输出目录=始终复制”。

然后运行应用程序,它将正常工作。


-1

我添加了对 Scintilla.dll 的引用,而不是 SciLexer.dll - 然后它就可以工作了。


我认为您安装了某些工具,它自己添加到了路径变量并包含一个SciLexer.dll(例如TortoiseSVN)。在这种情况下,将选择此位置的dll,并且您的工具将无法在干净安装的计算机上运行。要检查这一点,请打开命令提示符并输入“where SciLexer.dll”。如果您找到了某些内容,请将该文件重命名为临时文件,然后再次启动您的工具。最后但并非最不重要的是运行“ProcessMonitor”,并检查从哪里加载您的SciLexer.dll。 - Oliver

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