从内存而不是磁盘向CompilerParameters ReferenceAsAsmblies提供程序集?
我有一个CompilerParameters
对象,用于提供Microsoft.CSharp.CSharpCodeProvider
对象和从中派生的ICodeCompiler
对象。
一切正常,我可以动态编译代码。 我的问题是引用的程序集。 现在,我只需将System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()
所有程序集添加到编译器参数的ReferencedAssemblies
。 这适用于硬盘上的文件。 但是我有一个在内存中而不在磁盘上的程序集。 当我尝试引用它时,我得到一个FileNotFoundException
,我期望它,因为它试图添加一个不存在的路径。
那么如何将实际的Assembly
对象传递给CompilerParameters.ReferencedAssemblies
?
我从2006年开始在网上看过几篇post,之前说这根本不可能。 我希望.net 3.5和.net 4.0已经添加了对这类内容的支持,但我不确定。
仅供参考,我使用的是.NET 4.0
此外,我现在正在程序空间的byte []创建一个临时文件,然后将该文件加载到程序集中。 我知道编译器会在后台执行此操作,但我相信它也会自行清理。 如果我能这样做会很棒:
CompilerParameters.ReferencedAssemblies.Add(Assembly a)
那么你想要添加内存汇编作为参考?
我不确定CSharpCodeProvider
是否支持这种方法。