.NET 6单文件程序中如何将当前程序集转为byte[]或MetadataReference
.NET 6单文件发布下Roslyn脚本引用当前程序集的问题
我有一个.NET 6.0项目,使用Roslyn编译类C#脚本语言,该脚本需要继承并使用项目中的若干类。目前通过以下代码添加对当前程序集的引用:
var options = ScriptOptions.Default .WithReferences(Assembly.GetExecutingAssembly())
这段代码在项目发布前运行正常,但发布为单文件可执行CLI程序后,GetExecutingAssembly().Location为空。因需求限制必须保持单文件形式,所以需要将GetExecutingAssembly()转换为byte[],以便使用MetadataReference.CreateFromImage()方法。
我已尝试以下几种方案,但均未解决问题:
- 使用
BinaryFormatter序列化程序集或单个类所在程序集,即使类带有Serializable特性,仍报错类型不可序列化; - 尝试使用
System.Security.Policy中的Hash类,但该类不存在,也未找到对应的COM引用或NuGet包; - 将程序集添加到资源文件,但多项目场景下需在Debug/Release模式切换时修改资源文件,还需为每个项目添加对应版本DLL并切换,希望能找到Visual Studio构建选项的替代方案;
- 在运行时编译脚本语言所需类并生成DLL文件,但该方案效率较低。
请问有何方法可将程序集转换为二进制数组或直接转为MetadataReference?
内容的提问来源于stack exchange,提问作者Harith Al-Safi
相关产品推荐
相关产品推荐

