我使用以下代码将新的json文本分配给文档:
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();
}
}
但我目前的解决方案有三个问题:
有没有更好的方法将新文本分配给EnvDTE.Document?
这是损坏的文本:
但这就是我指定的内容:
...
...
},
"client": {
"title": "Mr"
}
}
我指定的json文本是有效且格式良好的,即使它不是,我也不会期待json文本的这种严重腐败。
如果我将文本直接写入文件,那么Visual Studio会询问用户是否要重新加载,我也试图避免使用该弹出窗口。
任何帮助将不胜感激。我没有成功使用roslyn和TextDocument,因为我无法加载AdditionalDocument。 roslyn Project Documents集合中只包含代码文件。
答案 0 :(得分:3)
您可以使用textSelection.Text = contents;
代替textSelection.Insert(contents);
。它更快,并阻止Visual Studio更改原始内容。