如何将EnvDTE Project全局变量保存到vcxproj.user而非.vcxproj文件
将自定义变量写入.vcxproj.user文件的实现方案
完全可以实现该需求。你当前使用的Project.Globals接口默认将持久化变量存储到主项目文件(projectname.vcxproj)中,要写入用户专属的projectname.vcxproj.user文件,需要使用IVsBuildPropertyStorage接口指定存储位置。
- 首先添加必要的程序集引用:
你需要在VS扩展项目中引用Microsoft.VisualStudio.Shell.Interop、Microsoft.VisualStudio.Shell.Interop.8.0程序集,同时引入对应命名空间。 - 写入变量到*.vcxproj.user*的代码示例:
// 将现有Project对象强制转换为IVsBuildPropertyStorage接口 IVsBuildPropertyStorage propertyStorage = project as IVsBuildPropertyStorage; if (propertyStorage != null) { // 第三个参数传入PST_USER_FILE,指定将属性存储到用户配置文件 propertyStorage.SetPropertyValue( "variablename", "", (uint)_PersistStorageType.PST_USER_FILE, "write this value" ); }
- 读取*.vcxproj.user*中变量的代码示例:
string readValue = string.Empty; IVsBuildPropertyStorage propertyStorage = project as IVsBuildPropertyStorage; if (propertyStorage != null) { // 同样指定PST_USER_FILE,从用户配置文件读取属性 int result = propertyStorage.GetPropertyValue( "variablename", "", (uint)_PersistStorageType.PST_USER_FILE, out readValue ); // 若result不等于0代表目标变量不存在,可自行补充初始化逻辑 }
该方式写入的变量会自动保存在*.vcxproj.user文件的
<PropertyGroup>节点下,不会修改主.vcxproj*项目文件,完全满足用户本地配置不随源码提交的使用需求。
内容的提问来源于stack exchange,提问作者tobaroony
相关产品推荐
相关产品推荐

