gpt4 book ai didi

c# - 是否可以在没有“检测到文件修改”对话框的情况下从 VS 包写入当前 VS 解决方案文件

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

从一个VS包代码,我想知道是否有一个API可以在没有检测到文件修改对话框的情况下写入当前打开的VS解决方案文件。

VS File Modification Detected

我需要编写自定义 GlobalSection:

GlobalSection(MyProduct) = preSolution
MyData = "XYZ"
EndGlobalSection

我知道 IVsDocDataFileChangeControl和相关的 sample source code , 但解决方案文件对象似乎无法转换为 IVsPersistDocData . enter image description here

最佳答案

您正在寻找 IVsSolutionPersistence服务,您可以通过将 typeof(SVsSolutionPersistence) 传递给 GetService 来获取该服务。我会在今天晚些时候尝试查看更多详细信息。

Facilitates writing package-specific properties and options into the solution file (.sln), and, conversely, the loading of properties and options from the file.


好吧,我终于找到时间深入研究 IVsSolutionPersistence。使用这个界面的工作量高得离谱,所以希望这个答案能帮助其他一些人,而不是在这上面浪费时间。

基本上,您可以将选项保存在 .sln Solution 文件中,或保存在 .suo Solution User Option 文件。 .sln Solution 文件适合与使用该解决方案的每个人共享选项,.suo Solution User Option文件仅适用于在用户本地计算机上存储/恢复选项。

存储在 .SUO 文件中

要通过 .suo Solution User Option 文件实现存储,您需要您的 Package 类实现接口(interface) IVsPersistSolutionOpts . Microsoft.VisualStudio.Shell.Package类已经实现了这个接口(interface),但是您需要重写包类中的所有四个方法。要获得此示例实现,您可以引用此 Code Project 的源代码文章。备注:

  • VS提供的流需要用本项目定义的StreamEater类封装?显然这个ComStreamWrapper class做同样的事情。
  • 保存在.suo 文件中时,用户不会收到任何要求保存更改的提示对话框。
  • 当通过 VS experimental 调试你的包时,你会看到 .suo 文件并没有真正写入,我认为 VS experimental 不想碰它(只是我的猜测,不确定)。
  • .suo 文件存储是专有的二进制存储。您仍然可以通过文本阅读器打开此类文件,并希望以某种方式查看您的键/值数据。

存储在 .SLN 文件中

要通过.sln 解决方案 文件实现存储,您需要您的Package 类实现接口(interface)IVsPersistSolutionProps。 .该接口(interface)实现了 IVsPersistSolutionOpts接口(interface),但它不是由类实现的 Microsoft.VisualStudio.Shell.Package .我发现的最好的现有实现是在项目 VisualGit 中。源代码。备注:

  • 您需要使用一个或多个标记您的包类 ProvideSolutionPropertiesAttribute["YourDataKey"] .如果您不这样做,您的方法 ReadSolutionProps() 将不会被调用。
  • 您需要包装对 Microsoft.VisualStudio.OLE.Interop.IPropertyBag 的读/写访问通过类PropertyBag .您可以选择使用报价保存数据,或者只保存原始数据。 .sln 文件中添加的部分如下所示:

      GlobalSection(MY_SECTION_NAME) = preSolution
    MY_DATA = "12:02:45"
    EndGlobalSection
  • 在方法 ReadSolutionProps() 的实现中,您必须传递 VSQUERYSAVESLNPROPS将向 VS 指示存储状态的值。

  • .sln 文件将在用户关闭解决方案或关闭 VS 并打开解决方案时实际写入。如果用户想要修改 .sln 文件,系统将提示用户。如果用户执行“全部保存”,则在“全部保存”时和“关闭解决方案”时都不会提示她修改 .sln 文件。

关于c# - 是否可以在没有“检测到文件修改”对话框的情况下从 VS 包写入当前 VS 解决方案文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26096332/

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