【发布时间】:2023-02-08 04:06:42
【问题描述】:
我正在尝试编写一个 Blazor WebAssembly (WASM) 应用程序,它接受一些代码(来自一些文本输入字段)并使用 Roslyn 编译代码。
我正在使用 Roslyn 的 CSharpCompilation 类来创建编译。它的Create 方法有四个参数,其中一个是MetadataReferences 的列表(又名程序集引用)。在其他(非 blazor)类型的应用程序中,例如 C# 控制台应用程序,您可以根据 Asssembly Location 获取这些 MetadataReferences,如下所示:
var locatedAssemblies = AppDomain.CurrentDomain.GetAssemblies().Where(a => !string.IsNullOrEmpty(a.Location)).ToArray();
foreach (var assembly in locatedAssemblies)
{
MetadataReference reference = MetadataReference.CreateFromFile(assembly.Location);
}
不幸的是,这在 Blazor WASM 中不再有效,因为程序集的 Locations 是空的。
我曾尝试以不同的方式获取程序集,例如 AppDomain.CurrentDomain.GetAssemblies() 和 Assembly.GetEntryAssembly().GetReferencedAssemblies(),但所有的 Locations 都是空的。我也试过拨打Assembly.Load(),但没有成功。
有谁知道如何在 Blazor WASM 中获取 MetadataReferences,或者我将如何在 Blazor WASM 中创建编译?
(我也知道我可能需要使用 MetadataReference.CreateFromStream(),但它仍然需要装配位置)。
提前致谢。
【问题讨论】:
标签: .net-core blazor .net-6.0 roslyn blazor-webassembly