Sitecore Experience Management

Assembly resolver scanner

Abstract

You can configure the number of assemblies Sitecore scans at start-up to make the start-up process faster.

Sitecore uses assembly resolvers to scan the assemblies for types at runtime. Type scanning large collections of assemblies can be a resource-intensive task. You can configure which assemblies to include and exclude from this scan. Excluding assemblies can increase startup time.

You can use three different strategies scanning assemblies:

  • Blacklist – loads all libraries except the ones listed in the excludedAssemblies node. Namespace: Sitecore.Web.AssembliesScanner.ExcludedAssembliesConfiguration.

  • Whitelist – loads only the libraries listed in the includedAssemblies node. Namespace: Sitecore.Web.AssembliesScanner.IncludedAssembliesConfiguration.

  • Mixed strategy – loads any whitelisted assembly that you have not blacklisted. Namespace: Sitecore.Web.AssembliesScanner.MixedAssembliesConfiguration.

You can also create a custom strategy.

All assembly configuration is under the configurationAssemblies node. You specify the strategy that Sitecore uses by setting the type of this node, for example: Sitecore.Web.AssembliesScanner.ExcludedAssembliesConfiguration, Sitecore.Web.

Exclude (blacklist) assemblies

Specify the assemblies in the configurationAssemblies/excludedAssemblies node that you want to exclude as a list of assembly names. Assembly names that start with a name contained in the excludedAssemblies list are not scanned.

You can add your solution assemblies to the list if you know they do not contain types that are scanned.

Example:

<excludedAssemblies hint="list">
    <excludedAssembly id="Antlr3.Runtime">Antlr3.Runtime</excludedAssembly>
    <excludedAssembly id="ComponentArt">ComponentArt</excludedAssembly>
    <excludedAssembly id="CsQuery">CsQuery</excludedAssembly>
    <excludedAssembly id="CustomFields">CustomFields</excludedAssembly>
</excludedAssemblies>

Include (whitelist) assemblies

Specify the assemblies in the configurationAssemblies/includedAssemblies node that you want to include as a list of assembly names. Assembly names that start with a name in the includedAssemblies list are scanned.

Example:

<includedAssemblies hint="list">    <includedAssembly id="Sitecore.Mvc">Sitecore.Mvc</includedAssembly>    <includedAssembly id="System.Web.Mvc">System.Web.Mvc</includedAssembly></includedAssemblies>

Mixed strategy

You can use the mixed strategy to list excludedAssemblies and includedAssemblies at the same time.

The following examples shows what happens when you use a mixed strategy.

Example 1:

<excludedAssemblies hint="list">
    <excludedAssembly id="Sitecore.Mvc">Sitecore.Mvc</excludedAssembly>
</excludedAssemblies>
<includedAssemblies hint="list">
    <includedAssembly id="Sitecore.">Sitecore.</includedAssembly>
</includedAssemblies>

Result: Scans all of the *Sitecore*.* assemblies except Sitecore.Mvc.

Example 2:

<excludedAssemblies hint="list">
    <excludedAssembly id="Sitecore.Mvc">Sitecore.Mvc</excludedAssembly>
</excludedAssemblies>
<includedAssemblies hint="list">
    <includedAssembly id="Sitecore.Mvc">Sitecore.Mvc</includedAssembly>
</includedAssemblies>

Result: Scans no assemblies.

Example 3:

<excludedAssemblies hint="list">
    <excludedAssembly id="Sitecore.">Sitecore.</excludedAssembly>
</excludedAssemblies>
<includedAssemblies hint="list">
    <includedAssembly id="Sitecore.Mvc">Sitecore.Mvc</includedAssembly>
</includedAssemblies>

Result: Scans no assemblies.

If you add a configuration similar to this example in an include file, for example ExcludedAssembliesScanner.config, Sitecore patches the original file with what you specify:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
    <sitecore>
        <mvc>
            <configurationAssemblies type="Sitecore.Web.AssembliesScanner.ExcludedAssembliesConfiguration, Sitecore.Web">
                <excludedAssemblies hint="list">
                   <excludedAssembly id="MyTestWildCard1">MyTestWildCard1</excludedAssembly>
                   <excludedAssembly id="MyTestWildCard2">MyTestWildCard2</excludedAssembly>
                </excludedassemblies>
            </configurationAssemblies>
        </mvc>
    <sitecore>
</configuration>

All excludedAssembly nodes must have a unique ID.

Note

You can specify a server role for a node with a list of assemblies. If you do, Sitecore will only use the list for this server role. You specify the server role like this:

<excludedAssemblies hint="list" role:require="ContentDelivery">

Follow these steps to create a custom strategy:

  1. Create a configuration class that inherits from the AssembliesConfiguration abstract class.

  2. Override the AssemblyFilter property in this class. The property must return an instance of the filter class.

  3. Create a filter class that implements IAssemblyFilter, and put all of the filter logic in the IsAllowed method.