This is an add-in for Fody
Loads all the references on startup by actually using the types in the module initializer.
Available here: http://nuget.org/packages/LoadAssembliesOnStartup.Fody
To Install from the Nuget Package Manager Console
PM> Install-Package LoadAssembliesOnStartup.Fody
By default, assemblies are only loaded on-demand. This means that the first time a type is actually used, the .NET runtime will load the assembly.
When using ModuleInit, it is possible to initialize an assembly at startup. For example, to register types in a service locator.
To prevent hacks such as the one displayed below:
// Note: this is a hack, force loading of external assembly
var dummyType = typeof(MyExternalAssemblyType);
Console.WriteLine(dummyType.FullName);
it is possible to let this plugin take care of this. It will add the following code for each referenced assembly that contains at least one public class:
var preloadType = typeof(ReferenceType);
This will ensure that an assembly is actually being loaded into the AppDomain (which is not the same as Assembly.LoadFrom).
All config options are accessible by modifying the LoadAssembliesOnStartup
node in FodyWeavers.xml.
A list of assembly names to exclude from the default action of "embed all Copy Local references".
Do not include .exe
or .dll
in the names.
Can not be defined with IncludeAssemblies
.
Can take two forms.
As an element with items delimited by a newline.
<LoadAssembliesOnStartup>
<ExcludeAssemblies>
Foo
Bar
</ExcludeAssemblies>
</LoadAssembliesOnStartup>
Or as a attribute with items delimited by a pipe |
.
<LoadAssembliesOnStartup ExcludeAssemblies='Foo|Bar' />
A list of assembly names to include from the default action of "embed all Copy Local references".
Do not include .exe
or .dll
in the names.
Can not be defined with ExcludeAssemblies
.
Can take two forms.
As an element with items delimited by a newline.
<LoadAssembliesOnStartup>
<IncludeAssemblies>
Foo
Bar
</IncludeAssemblies>
</LoadAssembliesOnStartup>
Or as a attribute with items delimited by a pipe |
.
<LoadAssembliesOnStartup IncludeAssemblies='Foo|Bar' />
By default, this weaver will include references that are optimized away by the compiler. This can happen when you only use interfaces from a reference. Types can still be excluded using the ExcludeAssemblies
option.
To disable all the optimized assemblies (default .NET compiler behavior), use the option below:
<LoadAssembliesOnStartup ExcludeOptimizedAssemblies='true' />
By default, this weaver calls the typeof(SomeType)
without any exception handling. While in general, this is good, it might happen that an assembly cannot be loaded. This can either be solved by adding it to the ExcludeAssemblies
list or setting the WrapInTryCatch
property to true:
<LoadAssembliesOnStartup WrapInTryCatch='true' />
Then the weaved code will look like:
try
{
typeof(FirstTypeFromReference1);
}
catch (Exception
{
}
try
{
typeof(FirstTypeFromReference2);
}
catch (Exception
{
}
Explosion by Gustav Salomonsson from The Noun Project