我们有一个用于Eclipse的插件/扩展(VB.NET窗体exe应用程序),但现在也希望将其用于Visual Studio Code。简单地说,exe组成了一些代码行(文本),可以在光标处插入。
所以我必须:
有人知道该怎么做吗? ...并且可能有一个正在运行的示例吗?
编辑:这就是我所拥有的,并且可以正常工作...唯一的问题是启动VB.NET可执行文件:
// Get the active text editor
let editor = vscode.window.activeTextEditor;
if (editor) {
let selection = editor.selection;
// start VB.NET exe here ... but how ?
// insert a text at current position
editor.edit(editBuilder => {
editBuilder.insert(selection.start, 'text inserted');
});
}
已经有一段时间了,但是由于我一直在努力解决相同的问题,而现在我已经弄清楚了,所以认为留下答案会很好。我还假设您的问题不是texteditor本身,而是如何从exe获取文本。
我完成此操作的方式是创建一个控制台应用程序,将结果序列化为JSON,然后将其输出到控制台,然后从vsc扩展端读取进程中的缓冲区,并将其解析回对象可以使用。
我的应用程序:
class Program
{
public class TMSCheckResult
{
public bool ValidationSucceeded { get; set; }
public string ResultMessage { get; set; }
public int ErrorColumn { get; set; }
public int ErrorRow { get; set; }
}
static void Main(string[] args)
{
var result = new TMSChecker().Validate(args[0], args[1]);
var serializedResult = JsonConvert.SerializeObject(result);
Console.WriteLine(serializedResult);
}
}
我的扩展名:
import * as child from 'child_process';
interface TMSCheckResult {
ValidationSucceeded: boolean;
ResultMessage: string;
ErrorColumn: number;
ErrorRow: number;
}
export class TMSChecker {
runValidation() {
const res = child.execFileSync('myapppath.exe', ['arg0', 'arg1']);
let result: TMSCheckResult = JSON.parse(res.toString());
if (!result.ValidationSucceeded) {
vscode.window.showErrorMessage(result.ResultMessage);
//... work on the texteditor to show where the error is
}
else {
vscode.window.showInformationMessage('Syntax is correct.');
}
}
}
PS 1:您的exe必须始终以0退出-只需将Main
保留为void
-否则扩展名会出现异常。
PS 2:如果结果文本太大,则可能需要将结果写入文件,然后在扩展名上读取该文件,否则可能最终不得不处理缓冲区大小限制。 >