IVsUserSettings.ImportSettings 方法
,当用户选择 导入/导出设置 功能的导入选项在 IDE 的 工具 菜单时,检索的 VSPackage 中配置为使用 Visual Studio 设置结构。
命名空间: Microsoft.VisualStudio.Shell.Interop
程序集: Microsoft.VisualStudio.Shell.Interop.8.0(在 Microsoft.VisualStudio.Shell.Interop.8.0.dll 中)
语法
声明
Function ImportSettings ( _
pszCategoryGUID As String, _
pSettings As IVsSettingsReader, _
flags As UInteger, _
<OutAttribute> ByRef pfRestartRequired As Integer _
) As Integer
int ImportSettings(
string pszCategoryGUID,
IVsSettingsReader pSettings,
uint flags,
out int pfRestartRequired
)
参数
- pszCategoryGUID
类型:System.String
[in] 标识设置组的 GUID 将导入。这是自定义标识的 GUID 下落点。有关自定义的更多信息 Points 看到注册设置持久性支持。
- pSettings
类型:Microsoft.VisualStudio.Shell.Interop.IVsSettingsReader
[in]环境提供的IVsSettingsWriter 接口以提供对 Visual Studio 设置文件的 VSPackage 读取权限。
- flags
类型:System.UInt32
[in] 从指示 ImportSettings 的实现方式的系统的标志应处理检索的设置。
这支持的值是 __UserSettingsFlags 枚举的成员。
- pfRestartRequired
类型:System.Int32%
[out] 标记返回到指示是否的环境要求 IDE 中重新启动才能完成基于检索的数据的环境重新配置。如果 pfRestartRequired 返回的值是 true,应重新启动该环境。
返回值
类型:System.Int32
如果方法成功,则返回 S_OK。如果失败,它会返回一个错误代码。
备注
唯一 VSPackage 中支持多个自定义下落点 (设置类别)。 因此, ImportSettings 的实现必须检查传递的类别 GUID,并选择检索的特殊的自定义指定的状态正确的结构下落点。
设置信息在 XML 文件中。 这些手动可编辑的 XML 文件大大影响磁盘上的损坏,可以包含特定于版本的设置,并且可能用作通信工具恶意攻击。 因此,输入的验证很重要为检索一组配置数据的一部分。
如果将无效找到资源, ImportSettings 的实现可以使用 IDE。 ReportError 方法自动提示用户。
Visual Studio IDE 提示用户重新启动 Visual Studio ,当实现 ImportSettings 的 VSPackage 清单时 Visual Studio 环境需要重新启动在设置数据之后导入将返回与 true的值 pfRestartRequired 。 不需要实现用户对话框或 Visual Studio关闭。
示例
在此示例中, ImportSettings 的实现选择在检索之间的数据的两个不同的方法根据 pszCategoryGUID 参数。
在此示例中,处理 __UserSettingsFlags 根据标志也显示。
STDMETHOD(ImportSettings)(WCHAR *pszCategoryGUID, IVsSettingsReader *pSettings, UserSettingsFlags flags, BOOL *pfRestartRequired)
{
CLSID clsidCategory;
HRESULT hr;
hr = CLSIDFromString(pszCategoryGUID, &clsidCategory);
IfFailGo(hr);
//Delegate to the right internal implementation based on the requested category
if (GUID_Profiles_CommandBars == clsidCategory)
{
hr = ImportSettings_CommandBars(, pSettings, flags, pfRestartRequired);
}
else if (GUID_Profiles_KeyBindings == clsidCategory)
{
hr = ImportSettings_KeyBindings( pSettings, flags, pfRestartRequired);
}
else
{
hr = E_UNEXPECTED;
}
Error:
return hr;
};
// Import Settings
HRESULT ImportSettings_CommandBars(IVsSettingsReader *pSettings, UserSettingsFlags flags, BOOL *pfRestartRequired)
{
if (!pSettings)
return E_INVALIDARG;
if (pfRestartRequired)
{
*pfRestartRequired = FALSE; //Nobody should require a restart!!
}
CComBSTR bstrFirstSettingName;
long lTrashLength = 0;
BYTE *pTrashBytes = NULL;
//Determines whether we can treat import as an additive operation, or a reset all settings operation
BOOL fResetCompletely = FALSE;
if (flags & USF_ResetOnImport)
fResetCompletely = TRUE;
hr = pSettings->ReadSettingString(c_szFirstSettingName, &bstrFirstSettingName);
IfFailGo(hr);
hr = pSettings->ReadSettingLong(c_szRandomTrashLength, &lTrashLength);
IfFailGo(hr);
if (lTrashLength > 0)
{
pTrashBytes = (BYTE*)VSAlloc(lTrashLength);
IfNullMemGo(pTrashBytes);
long lDataRead = 0;
hr = pSettings->ReadSettingBytes(c_szRandomTrashLength, pTrashBytes, &lDataRead, lTrashLength);
IfFailGo(hr);
if (lDataRead != lTrashLength)
{
hr = E_UNEXPECTED;
goto Error;
}
}
//Note: Before returning, these settings should immediately be applied to your personal
// settings store, whether in the registry or the file system.
//This write-through cache methodology is essential to allow us to work in multi-instance IDE scenarios.
hr = UpdateState_CommandBar(bstrFirstSettingName,lTrashLength,pTrashBytes,lDataRead);
Error:
return hr;
};
HRESULT ImportSettings_KeyBindings(IVsSettingsReader *pSettings, UserSettingsFlags flags, BOOL *pfRestartRequired)
{
if (!pSettings)
return E_INVALIDARG;
if (pfRestartRequired)
{
*pfRestartRequired = FALSE; //Nobody should require a restart!!
}
CComBSTR bstrBreakPointWindow;
//Determines whether we can treat import as an additive operation, or a reset all settings operation
BOOL fResetCompletely = FALSE;
if (flags & USF_ResetOnImport)
fResetCompletely = TRUE;
hr = pSettings->ReadSettingString(c_szBreakPointWindow, &bstrBreakPointWindow);
IfFailGo(hr);
//Note: Before returning, these settings should immediately be applied to your personal
// settings store, whether in the registry or the file system.
//This write-thru cache methodology is essential to allow us to work in multi-instance IDE scenarios.
hr = UpdateState_KeyBindings(bstrBreakPointWindow);
Error:
return hr;
}
.NET Framework 安全性
- 对直接调用方的完全信任。此成员不能由部分信任的代码使用。有关更多信息,请参见通过部分受信任的代码使用库。
请参见
参考
Microsoft.VisualStudio.Shell.Interop 命名空间