Assembly resolver scanner
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 decrease 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.
Configure the inclusion and exclusion of assemblies
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.
Patch the configuration
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.
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">
Create a custom strategy
Follow these steps to create a custom strategy:
-
Create a configuration class that inherits from the
AssembliesConfiguration
abstract class. -
Override the
AssemblyFilter
property in this class. The property must return an instance of the filter class. -
Create a filter class that implements
IAssemblyFilter
, and put all of the filter logic in theIsAllowed
method.