Skip to content

Commit 317183a

Browse files
Update Compilation service in order to relax assembly identity matching
1 parent c2084bc commit 317183a

1 file changed

Lines changed: 22 additions & 13 deletions

File tree

src/Services/CompilationService.cs

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -142,15 +142,17 @@ private async ValueTask<CompilerMessage> CompileAsync(CompilerData compilerData,
142142
Dictionary<string, MetadataReference> references = new(StringComparer.OrdinalIgnoreCase);
143143

144144
OxideResolver resolver = (OxideResolver)_metadataReferenceResolver;
145+
145146
if (compilerData.StdLib)
146147
{
147-
references.Add("System.Private.CoreLib.dll", resolver.Reference("System.Private.CoreLib.dll")!);
148-
references.Add("netstandard.dll", resolver.Reference("netstandard.dll")!);
149-
references.Add("System.Runtime.dll", resolver.Reference("System.Runtime.dll")!);
150-
references.Add("System.Collections.dll", resolver.Reference("System.Collections.dll")!);
151-
references.Add("System.Collections.Immutable.dll", resolver.Reference("System.Collections.Immutable.dll")!);
152-
references.Add("System.Linq.dll", resolver.Reference("System.Linq.dll")!);
153-
references.Add("System.Data.Common.dll", resolver.Reference("System.Data.Common.dll")!);
148+
references.Add("System.Private.CoreLib.dll", resolver.AddReference("System.Private.CoreLib.dll")!);
149+
references.Add("netstandard.dll", resolver.AddReference("netstandard.dll")!);
150+
references.Add("System.Runtime.dll", resolver.AddReference("System.Runtime.dll")!);
151+
references.Add("System.Collections.dll", resolver.AddReference("System.Collections.dll")!);
152+
references.Add("System.Collections.Immutable.dll", resolver.AddReference("System.Collections.Immutable.dll")!);
153+
references.Add("System.Linq.dll", resolver.AddReference("System.Linq.dll")!);
154+
references.Add("System.Data.Common.dll", resolver.AddReference("System.Data.Common.dll")!);
155+
154156
}
155157

156158
if (compilerData.ReferenceFiles is { Length: > 0 })
@@ -168,6 +170,7 @@ private async ValueTask<CompilerMessage> CompileAsync(CompilerData compilerData,
168170
referenceFile.Data.Length == 0)
169171
? MetadataReference.CreateFromFile(referenceFile.Name)
170172
: MetadataReference.CreateFromImage(referenceFile.Data, filePath: referenceFile.Name);
173+
171174
continue;
172175
}
173176
default:
@@ -211,11 +214,10 @@ private async ValueTask<CompilerMessage> CompileAsync(CompilerData compilerData,
211214

212215
_logger.LogDebug($"Added {syntaxTrees.Count} plugins to the project");
213216

214-
CSharpCompilationOptions compilationOptions = new(compilerData.OutputKind(), metadataReferenceResolver: resolver,
215-
platform: compilerData.Platform(),
216-
allowUnsafe: true,
217-
deterministic: true,
218-
optimizationLevel: OptimizationLevel.Debug);
217+
CSharpCompilationOptions compilationOptions = new CSharpCompilationOptions(compilerData.OutputKind(),
218+
metadataReferenceResolver: resolver, platform: compilerData.Platform(), allowUnsafe: true,
219+
deterministic: true, optimizationLevel: OptimizationLevel.Debug)
220+
.WithAssemblyIdentityComparer(DesktopAssemblyIdentityComparer.Default);
219221

220222
string assemblyName = Path.GetRandomFileName();
221223
CSharpCompilation compilation = CSharpCompilation.Create(assemblyName, syntaxTrees.Values,
@@ -295,7 +297,14 @@ private void CompileProject(CSharpCompilation compilation, CompilerData compiler
295297
}
296298
else
297299
{
298-
_logger.LogError($"[{diagnostic.Id}] {diagnostic.GetMessage()}");
300+
string diagnosticMessage = diagnostic.GetMessage();
301+
compilerMessage.Errors ??= new List<CompilerError>();
302+
compilerMessage.Errors.Add(new CompilerError
303+
{
304+
Message = diagnosticMessage,
305+
});
306+
307+
_logger.LogError($"[{diagnostic.Id}] {diagnosticMessage}");
299308
}
300309
}
301310

0 commit comments

Comments
 (0)