Sitecore IsPageEditor和iExperienceEditor

Sitecore IsPageEditor和iExperienceEditor,sitecore,compatibility,sitecore8,Sitecore,Compatibility,Sitecore8,我们目前正在为Sitecore编写一个模块,遇到了一个问题 我们有一个管道,我们在其中执行以下检查: if(Sitecore.Context.PageMode.IsExperienceEditor) { 返回; } 问题是,我们的一个客户机正在运行旧版本的Sitecore(8.0更新5),其中属性IsExperienceEditor尚不存在。请参阅Sitecore以了解下一次更新 为了快速修复错误,我们使用了较旧的已弃用属性,即: if(Sitecore.Context.PageMode.Is

我们目前正在为Sitecore编写一个模块,遇到了一个问题

我们有一个管道,我们在其中执行以下检查:

if(Sitecore.Context.PageMode.IsExperienceEditor)
{
返回;
}
问题是,我们的一个客户机正在运行旧版本的Sitecore(8.0更新5),其中属性IsExperienceEditor尚不存在。请参阅Sitecore以了解下一次更新

为了快速修复错误,我们使用了较旧的已弃用属性,即:

if(Sitecore.Context.PageMode.IsPageEditor)
{
返回;
}

现在的问题是,是否有任何方法可以测试Sitecore版本,以便在模块中实现向后兼容性

您可以在您提到的两个属性的后台使用Sitecore中执行的代码:

if(Sitecore.Context.Site.DisplayMode==Sitecore.Sites.DisplayMode.Edit)
{
返回;
}

我知道使用
Sitecore.Context.PageMode.IsExperienceEditor
(或
Sitecore.Context.PageMode.IsPageEditor
)更优雅,但在需要同时支持旧版和新版Sitecore的情况下,这听起来是一个不错的选择。

IsPageEditor的已弃用属性仍然存在,专门用于向后兼容
iExperienceEditor
只是一个重命名的属性,它执行与IsPageEditor相同的操作

但是,您可以检查是否存在如下属性:

public static bool HasProperty(this object obj, string propertyName)
{
    return obj.GetType().GetProperty(propertyName) != null;
}
另一种选择是,如果不同版本的Sitecore的实现明显不同,则制作两个不同版本的模块