in src/SimplCommerce.WebHost/Extensions/ServiceCollectionExtensions.cs [228:269]
private static void TryLoadModuleAssembly(string moduleFolderPath, ModuleInfo module)
{
const string binariesFolderName = "bin";
var binariesFolderPath = Path.Combine(moduleFolderPath, binariesFolderName);
var binariesFolder = new DirectoryInfo(binariesFolderPath);
if (Directory.Exists(binariesFolderPath))
{
foreach (var file in binariesFolder.GetFileSystemInfos("*.dll", SearchOption.AllDirectories))
{
Assembly assembly;
try
{
assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(file.FullName);
}
catch (FileLoadException)
{
// Get loaded assembly. This assembly might be loaded
assembly = Assembly.Load(new AssemblyName(Path.GetFileNameWithoutExtension(file.Name)));
if (assembly == null)
{
throw;
}
string loadedAssemblyVersion = FileVersionInfo.GetVersionInfo(assembly.Location).FileVersion;
string tryToLoadAssemblyVersion = FileVersionInfo.GetVersionInfo(file.FullName).FileVersion;
// Or log the exception somewhere and don't add the module to list so that it will not be initialized
if (tryToLoadAssemblyVersion != loadedAssemblyVersion)
{
throw new Exception($"Cannot load {file.FullName} {tryToLoadAssemblyVersion} because {assembly.Location} {loadedAssemblyVersion} has been loaded");
}
}
if (Path.GetFileNameWithoutExtension(assembly.ManifestModule.Name) == module.Id)
{
module.Assembly = assembly;
}
}
}
}