C# 如何更改EnvDTE.Document的文本?
我使用以下代码为文档分配新的json文本:C# 如何更改EnvDTE.Document的文本?,c#,json,visual-studio-extensions,envdte,roslyn-code-analysis,C#,Json,Visual Studio Extensions,Envdte,Roslyn Code Analysis,我使用以下代码为文档分配新的json文本: public virtual async Task SetDocumentText(FileInfo fileInfo, string contents) { if (fileInfo == null) throw new ArgumentNullException(nameof(fileInfo)); var projectItem = FindDTEProjectItem(fi
public virtual async Task SetDocumentText(FileInfo fileInfo, string contents)
{
if (fileInfo == null)
throw new ArgumentNullException(nameof(fileInfo));
var projectItem = FindDTEProjectItem(fileInfo.FullName);
if (null == projectItem?.Document)
await Task.Run(() => fileInfo.WriteAllText(contents));
else
{
var textSelection = (TextSelection)projectItem.Document.Selection;
textSelection.SelectAll();
textSelection.Text = contents;
projectItem.Document.Save();
}
}
但目前的解决方案有三个问题:
...
...
},
"client": {
"title": "Mr"
}
}
我分配的json文本有效且格式良好,即使不是,我也不会期望json文本会出现如此严重的损坏
如果我将文本直接写入文件,那么VisualStudio将询问用户是否要重新加载,我也在尝试避免弹出窗口
任何帮助都将不胜感激。我无法使用roslyn和TextDocument,因为我无法加载附加文档。roslyn项目文档集合中只包含代码文件。而不是
textSelection.Text=contents代码>您可以使用textSelection.Insert(内容)代码>。它速度更快,可以防止Visual Studio更改原始内容。为什么要异步处理DTE对象?我相信它们不是线程安全的。@SergeyVlasov谢谢你的提示。我修正了密码。我认为Document.Save()或解决方案扫描不是问题。但是它可能是。谢谢,我在insert flagvsInsertFlagsContainNewText
上看到可以用来覆盖所选文本。vsInsertFlagsCollapseToEnd
标志指示将光标移动到插入的右侧,然后取消选择文本。听起来很有希望。