Skip to content

Commit

Permalink
Add more resilience to assembly loading (#29)
Browse files Browse the repository at this point in the history
* Add more resilience to assembly loading
* Bump to version 0.6.1
  • Loading branch information
DamianEdwards committed May 30, 2023
1 parent 691df57 commit 46c11c2
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 6 deletions.
2 changes: 1 addition & 1 deletion src/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project>

<PropertyGroup>
<VersionPrefix>0.6.0</VersionPrefix>
<VersionPrefix>0.6.1</VersionPrefix>
<!-- VersionSuffix used for local builds -->
<VersionSuffix>dev</VersionSuffix>
<!-- VersionSuffix to be used for CI builds -->
Expand Down
29 changes: 24 additions & 5 deletions src/RazorSlices/RazorSlice.ResolveAndCreate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,15 @@ static RazorSlice()
var referencedAssemblies = entryAssembly.GetReferencedAssemblies();
foreach (var assemblyName in referencedAssemblies)
{
AddSlicesFromAssembly(sliceDefinitions, Assembly.Load(assemblyName));
if (!IgnoreAssembly(assemblyName.Name))
{
try
{
var assembly = Assembly.Load(assemblyName);
AddSlicesFromAssembly(sliceDefinitions, assembly);
}
catch (Exception) { } // Ignore execptions when loading assemblies
}
}

// Load slices from bin-deployed assemblies
Expand All @@ -41,13 +49,17 @@ static RazorSlice()
var assembliesInBin = Directory.GetFiles(binDir, "*.dll");
foreach (var assemblyPath in assembliesInBin)
{
if (assemblyPath != entryAssembly.Location && File.Exists(assemblyPath))
if (assemblyPath != entryAssembly.Location && File.Exists(assemblyPath) && !IgnoreAssembly(Path.GetFileName(assemblyPath)))
{
var peerAssembly = Assembly.LoadFrom(assemblyPath);
if (referencedAssemblies.FirstOrDefault(ra => ra.FullName == peerAssembly.GetName().FullName) is null)
try
{
AddSlicesFromAssembly(sliceDefinitions, peerAssembly);
var peerAssembly = Assembly.LoadFrom(assemblyPath);
if (referencedAssemblies.FirstOrDefault(ra => ra.FullName == peerAssembly.GetName().FullName) is null)
{
AddSlicesFromAssembly(sliceDefinitions, peerAssembly);
}
}
catch (Exception) { } // Ignore execptions when loading assemblies
}
}
}
Expand All @@ -63,6 +75,13 @@ static RazorSlice()
.AsReadOnly();
_slicesByType = sliceDefinitions.ToDictionary(item => item.SliceType, item => item).AsReadOnly();

static bool IgnoreAssembly(string? assemblyName)
{
return assemblyName is null
|| assemblyName.StartsWith("System.", StringComparison.OrdinalIgnoreCase)
|| assemblyName.StartsWith("Microsoft.", StringComparison.OrdinalIgnoreCase);
}

static void AddSlicesFromAssembly(List<SliceDefinition> definitions, Assembly assembly)
{
foreach (var slice in LoadSlices(assembly))
Expand Down

0 comments on commit 46c11c2

Please sign in to comment.