12

更新:似乎 VS 没有执行我的用例所需的钩子。但是,有几个选项可能对其他人有用,因此我将问题标记为已回答,但我很想找到适合我的解决方案。


我们已加密文件,这些文件通常以加密形式保存在源代码控制 (TFS) 中。当我想比较版本时,我使用 Beyond Compare 并添加了加密/解密工具作为对读/写过程的过滤,以允许纯文本查看和编辑。

但是,如果我只想打开文件进行读取/编辑,那么使用虚拟比较来查看/编辑文件有点乏味。

例如,我想知道 Visual Studio 中是否有配置设置或方式允许我在读/写时插入过滤器,以便它可以显示/编辑/保存否则无法读取的文件。

编辑: *注意:加密方面只是单个用例 *,我实际上正在寻找一个通用答案,它不需要编写编辑器来替换 VS 中已经存在的编辑器,例如 MS 提供的 XML 编辑器或定制第三方的。

我有加密的自定义和非自定义文件。每种文件类型已经有一个编辑器。我们无权访问任何这些编辑器的源代码。问题是文件在 TFS 中加密,我需要的只是过滤所有文件的读写,而不管编辑器如何。

我想使用已安装编辑器的所有现有功能而无需更改。只有读写需要定制。

4

4 回答 4

3

如果没有其他简单的选择,这是实现您想要做的事情的一种潜在的 hacky 方式。

TFS 将数据存储在 SQL 数据库中。因此,理论上您可以修改用于从 TFS 中提取数据并将其发送到编辑器/查看器的读取/编辑命令。这可能涉及修改存储过程,或在数据呈现给编辑器之前放置触发器以修改数据。

当您单击编辑/查看或浏览到源代码控制树中的节点时,您需要在 TFS 数据库上运行 Profiler Trace。这将帮助您弄清楚 TFS 正在访问哪些数据以及它用于提取所述数据的函数/存储的过程/表等。

反之亦然;在将数据放入数据库之前,您需要修改数据的“写入”以使用您的自定义工具。

SQL 具有调用 CLR 代码的能力,因此您可以使用您的工具(如果它是用 .NET 编写的)。

于 2013-11-17T06:14:11.393 回答
1

这可能无法满足您的需求,因为您需要调用第三方 exe。但是,此答案可能对有权访问源代码(或 dll 或库)的其他人有用。

您可以编写一个文件系统过滤器来加密/解密与磁盘之间的数据。请注意,驱动程序位于操作系统级别,并且位于 Visual Studio 之外。

从 MSDN 文章文件系统和文件系统过滤器驱动程序

文件系统过滤器驱动程序拦截针对文件系统或另一个文件系统过滤器驱动程序的请求。通过在请求到达其预期目标之前拦截请求,过滤器驱动程序可以扩展或替换请求的原始目标提供的功能。文件系统和文件系统过滤器驱动程序的示例包括防病毒过滤器、备份代理和加密产品。

有关教程,请参阅此代码项目文章:文件系统过滤器驱动程序教程。这篇文章没有展示如何进行加密/解密,而是展示了如何启动并运行一个简单的驱动程序。

于 2013-11-17T15:50:05.843 回答
1

最简单的方法是下载 2012 SDK,Microsoft 已经在此处提供了有关如何实现自定义编辑器的不错的演练。

过程是:

  • 安装 SDK
  • 启动VS2012;选择新建项目 -> 其他项目类型 -> Visual Studio 包
  • Visual C#、公司名称等...
  • 勾选“自定义编辑器”复选框
  • 填写其余的详细信息

所以现在你看到了一个香草文本编辑器的所有源代码,你想要挂钩的部分是在 EditorPane.cs 下找到的 IPersistFileFormat::Load() 和 IPersistFileFormat::Save() 函数,并把你的加密/decryption 例程在那里,因此您将获得一个具有自定义加密文件格式的文本编辑器。

于 2013-11-11T01:26:54.563 回答
1

有一些扩展可以将事件捕获到当前窗口保存,例如,结果是文档加载。** 这不是自定义编辑器 **

查看以下两个链接:

http://msdn.microsoft.com/en-us/library/dd885244.aspx

和一个相当完整的开源插件,可以在保存时处理文件(无论类型如何)

https://bitbucket.org/s_cadwallader/codemaid/src/7cf1bf6108801f48b85e30d85e1646fbc73ba889/CodeMaid/Integration/Events/RunningDocumentTableEventListener.cs?at=default

它挂钩 RDT 表以扩展当前环境。当然,您需要从这里进行调整,但这应该会让您朝着正确的方向前进。

于 2013-11-17T19:48:35.170 回答