C# EpiServer-我怎样才能知道在任何已发布的页面上是否使用了块?

C# EpiServer-我怎样才能知道在任何已发布的页面上是否使用了块?,c#,episerver,C#,Episerver,我有一个episerver项目,随着时间的推移,它有很多块,其中一些块不再需要,有没有办法查看创建的块是否正在我的episerver网站的任何页面上使用?我很少这样做,但上次我用这段代码来获取自定义代码块的所有已发布实例 // initiate the repos (use dependency injection instead of the ServiceLocator) var contentTypeRepository = ServiceLocator.Current.GetInstan

我有一个episerver项目,随着时间的推移,它有很多块,其中一些块不再需要,有没有办法查看创建的块是否正在我的episerver网站的任何页面上使用?

我很少这样做,但上次我用这段代码来获取自定义
代码块的所有已发布实例

// initiate the repos (use dependency injection instead of the ServiceLocator)
var contentTypeRepository = ServiceLocator.Current.GetInstance<EPiServer.DataAbstraction.IContentTypeRepository>();
var contentModelUsage = ServiceLocator.Current.GetInstance<IContentModelUsage>();
var repository = ServiceLocator.Current.GetInstance<IContentRepository>();
var linkRepository = ServiceLocator.Current.GetInstance<IContentSoftLinkRepository>();

// loading a block type
var blockType = contentTypeRepository.Load(typeof(CodeBlock));

// get usages, also includes versions
IList<ContentUsage> usages = contentModelUsage.ListContentOfContentType(blockType);

List<IContent> blocks = usages.Select(contentUsage =>
                        contentUsage.ContentLink.ToReferenceWithoutVersion())
                        .Distinct()
                        .Select(contentReference =>
                                repository.Get<IContent>(contentReference)).ToList();


var unusedBlocks = new List<IContent>();

foreach (IContent block in blocks)
{
    var referencingContentLinks = linkRepository.Load(block.ContentLink, true)
                                .Where(link =>
                                        link.SoftLinkType == ReferenceType.PageLinkReference &&
                                        !ContentReference.IsNullOrEmpty(link.OwnerContentLink))
                                .Select(link => link.OwnerContentLink);

    // if no links
    if (!referencingContentLinks.Any())
    {
        unusedBlocks.Add(block);
    }
}
//启动repo(使用依赖项注入而不是ServiceLocator)
var contentTypeRepository=ServiceLocator.Current.GetInstance();
var contentModelUsage=ServiceLocator.Current.GetInstance();
var repository=ServiceLocator.Current.GetInstance();
var linkRepository=ServiceLocator.Current.GetInstance();
//加载块类型
var blockType=contentTypeRepository.Load(typeof(CodeBlock));
//获取用法,还包括版本
IList usages=contentModelUsage.ListContentOfContentType(blockType);
列表块=用法。选择(contentUsage=>
contentUsage.ContentLink.ToReferenceWithoutVersion())
.Distinct()
.选择(contentReference=>
Get(contentReference)).ToList();
var unusedBlocks=新列表();
foreach(块中的IContent块)
{
var referencengcontentlinks=linkRepository.Load(block.ContentLink,true)
.Where(link=>
link.SoftLinkType==ReferenceType.PageLinkReference&&
!ContentReference.IsNullOrEmpty(link.OwnerContentLink))
.Select(link=>link.OwnerContentLink);
//如果没有链接
如果(!referencencontentlinks.Any())
{
未使用的块。添加(块);
}
}
unusedBlocks

现在,像往常一样,不要使用ServiceLocator,除非您想隐藏依赖项