最近EPiServer 8でこれを解決しました:
ページが公開される前に発生する公開イベント(あなたの例では)では、比較のために ContentLoader サービスを使用するだけで正常に動作するはずです。ContentLoader は、公開されたバージョンを自動的に取得します。
if (e.Content != null && !ContentReference.IsNullOrEmpty(e.Content.ContentLink))
{
var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();
var publishedVersionOfPage = contentLoader.Get<IContent>(e.Content.ContentLink);
}
注: 既存のページにのみ適用されます (IE. 新しいページには、e 引数内に空の ContentLink (ContentReference.Empty) があります。
ページが公開された後に発生する PublishedPage イベントと同様です。次のスニペットを使用して、以前に発行されたバージョン (存在する場合) を取得できます。
var cvr = ServiceLocator.Current.GetInstance<IContentVersionRepository>();
IEnumerable<ContentVersion> lastTwoVersions = cvr
.List(page.ContentLink)
.Where(p => p.Status == VersionStatus.PreviouslyPublished || p.Status == VersionStatus.Published)
.OrderByDescending(p => p.Saved)
.Take(2);
if (lastTwoVersions.Count() == 2)
{
// lastTwoVersions now contains the two latest version for comparison
// Or the latter one vs the e.Content object.
}
注: この回答では、ローカリゼーションは考慮されていません。