项目持久性
持久性是项目的关键设计注意事项。 大多数项目使用表示文件的项目项;Visual Studio 还支持数据不基于文件的项目。 必须保留项目拥有的文件和项目文件。 IDE 指示项目保存自身或项目项。
项目的模板将传递到项目工厂。 模板应根据特定项目类型的要求支持所有项目项的初始化。 这些模板稍后可以保存为项目文件,并由 IDE 通过解决方案进行管理。 有关详细信息,请参阅 使用项目工厂 和 解决方案创建项目实例。
项目项可以是基于文件的,也可以是基于文件的:
基于文件的项可以是本地项,也可以是远程项。 例如,在 C# 中的 Web 项目中,与远程系统上的文件的连接在本地保留,而文件本身则保留在远程系统上。
非基于文件的项可以将项保存到数据库或存储库。
提交模型
确定项目项所在的位置后,必须选择相应的提交模型。 例如,在具有本地文件的基于文件的模型中,可以自主保存每个项目。 在存储库模型中,可以在一个事务中保存多个项。 有关详细信息,请参阅 项目类型设计决策。
若要确定文件扩展名,项目将实现 IPersistFileFormat 接口,该接口提供使对象的客户端能够实现 “另存为 ”对话框的信息,即填写 “另存为类型 ”下拉列表并管理初始文件扩展名。
IDE 调用 IPersistFileFormat
项目上的接口,以指示项目应根据需要保留其项目项。 因此,对象拥有其文件和格式的所有方面。 这包括对象格式的名称。
如果项不是文件, IPersistFileFormat
则仍会保留基于文件的项。 对于 Visual C++ 项目,项目文件(如 Visual Basic 项目的 .vbp 文件或 Visual C++ 项目的 .vcproj 文件)也必须持久保存。
对于保存操作,IDE 会检查正在运行的文档表(RDT),层次结构会将命令传递给 IVsPersistHierarchyItem 接口和 IVsPersistHierarchyItem2 接口。 此方法 IsItemDirty 实现以确定项是否已修改。 如果该项具有, SaveItem 则实现该方法以保存修改的项。
接口上的 IVsPersistHierarchyItem2
方法用于确定是否可以重新加载项,以及是否可以重新加载该项。 此外,IgnoreItemFileChanges还可以实现该方法,使更改的项被取消卡而不保存。