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 看到注册设置持久性支持。
  • 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 安全性

请参见

参考

IVsUserSettings 接口

Microsoft.VisualStudio.Shell.Interop 命名空间

ExportSettings

IVsUserSettingsQuery

其他资源

保留的设置

如何:使用互操作程序集的导出设置

如何:使用互操作程序集导入设置