You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:40:33