gpt4 book ai didi

c# - Visual Studio 2010 : How do I create and/or update a specific file within a Project from an Editor Extension?

转载 作者:行者123 更新时间:2023-11-30 21:22:16 25 4
gpt4 key购买 nike

我正在努力扩展最近在代码库中更新的拼写检查器:http://code.msdn.microsoft.com/spellCheckerSample

我想更新它,以便“忽略”单词列表来自 CustomDictionary.xml,这是静态代码分析工具使用的同一文件。

在我的 VS 2010 编辑器扩展中,我需要:

  1. 找到当前文件所在的项目。
  2. 找到“CustomDictionary.XML”文件(如果存在)。
  3. 如果存在,我需要从源代码管理中检查出来
  4. 如果它不存在,我需要将它添加到当前项目(和源代码管理)
  5. 将文本添加到 CustomDictionary.XML 文件(这是简单的部分)。

有没有人知道任何可以帮助我学习如何执行此操作的示例?我正在使用 VS2010 候选发布版。

谢谢。

~卡梅伦

这是我目前所拥有的:

public ISpellingDictionaryService GetSpellingDictionaryService(ITextBuffer textBuffer)
{
var bufferAdapter = AdaptersFactory.GetBufferAdapter(textBuffer);
if (bufferAdapter != null)
{
var extensibleObject = bufferAdapter as IExtensibleObject;
if (extensibleObject != null)
{
object document;
extensibleObject.GetAutomationObject("Document", null, out document);
// Control never gets here... GetAutomationObject appears to recurse.
}
}
}

最佳答案

首先,最好以我发布的拼写检查器示例的更新版本为基础进行扩展;你可以grab the source on github .

查找给定缓冲区的项目

假设您从 ITextBuffer 开始,您可以访问 DTE Project通过做:

  1. 在您拥有的任何 MEF 组件中(对于拼写检查器,SpellingDictionaryService 是最佳位置),添加以下 MEF 导入:

    [导入] IVsEditorAdaptersFactoryService AdaptersFactory = null;

    此外,添加对 Microsoft.VisualStudio.Editor.dll 的引用到项目,如果它还没有。

  2. 要么修改ISpellingDictionaryService上的方法也采取 ITextBuffer ,或修改服务以返回特定于缓冲区/项目的拼写字典实例(然后方法不需要将一个显式传递给每个调用)。
  3. 使用AdaptersFactory.GetBufferAdapter获取 VS 缓冲区适配器 ( IVsTextBuffer )。
  4. 将其转换为 IExtensibleObject , 并调用 IExtensibleObject.GetAutomationObject("Document")获取 DTE Document用于缓冲区。
  5. 在这里,您可以使用 ProjectItem属性(property),那么ContainingProject

如有必要,查找或添加 CustomDictionary.xml 文件

一旦你有了 Project , 你可以使用 project.ProjectItems.Item("CustomDictionary.xml")找到它(虽然我认为这可能只适用于顶级目录),它会抛出一个 ArgumentException如果它不存在。如果你需要添加它,那么,你可以在项目位置将文件写入磁盘并使用project.ProjectItems.AddFromFile(string filename)。添加它。您还可以通过首先在磁盘上查找项目文件(创建或写入它)然后在最后调用 AddFromFile 来检查项目文件是否存在,或者只在您创建文件时调用它或者无论如何调用它并且处理异常。添加并修改完成后,可以得到ProjectItem对于该文件并使用 ProjectItem.Save方法将其保存到磁盘。

checkout 或添加到源代码管理

来自Project DTE 对象(或任何 DTE 对象,实际上),您可以使用 SourceControl属性,它将让您检查该项目是否在源代码管理下并检查它。但是,我认为这只能让您“ checkout ”文件(如果您使用的是 TFS,我认为这会执行 tf edit),而不能将文件添加到源代码管理。抱歉,我不确定以编程方式执行此操作的最佳方法。

一些引用,来自 MSDN:

Top-level DTE object members
DTE.Project members
DTE.SourceControl members

关于c# - Visual Studio 2010 : How do I create and/or update a specific file within a Project from an Editor Extension?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2366752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com