【发布时间】:2020-07-26 07:04:20
【问题描述】:
在我的项目中,我将为每次编译使用相同的参考程序集(大约 30 个 dll)编译大量程序集。似乎在第一次编译参考程序集被缓存并且从第二次编译(1360ms -> 40ms)开始实现巨大的速度提升之后。我想在编译新程序集之前缓存所有引用程序集。
程序集在CSharpCompilation.Create(name, syntaxTrees, references) 方法期间被缓存。这个方法需要syntaxTree编译,但我只想缓存引用。我需要调用什么来缓存引用?
主要编译代码:
List<MetadataReference> references = new List<MetadataReference>();
foreach (var reference in assemblies)
{
try
{
references.Add(MetadataReference.CreateFromFile(reference));
}
catch (Exception e)
{
error += e + "\n";
exitCode |= (int)ExitCode.ReferenceError;
}
}
CSharpCompilation compilation = null;
compilation = CSharpCompilation.Create(
assemblyName,
syntaxTrees: syntaxTree,
references: references,
options: new CSharpCompilationOptions(
OutputKind.DynamicallyLinkedLibrary,
optimizationLevel: OptimizationLevel.Release,
allowUnsafe: true));
【问题讨论】: