奇怪的Assembly.Load错误尝试加载使用C#代码提供程序编译的程序
我正在尝试使用C#代码提供程序从我的代码编译程序集.
当我使用compilerResult.CompiledAssembly访问已编译的程序集时,一切正常.但是,当我改为执行Assembly.Load(路径)时,我得到以下异常:
我究竟做错了什么? 这是代码: [Test] public static void CompileCodeIntoAssembly() { var code = "public class X { }"; var file = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.Desktop),"output.cs"); File.WriteAllText(file,code); using (var provider = new CSharpCodeProvider()) { var parameters = new CompilerParameters { GenerateInMemory = false,// we want the dll saved to disk GenerateExecutable = false,CompilerOptions = "/target:library /lib:"" + typeof(Class2).Assembly.Location + """,OutputAssembly = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),"output.dll"),}; parameters.ReferencedAssemblies.AddRange(new[] { "System.dll",typeof(Class1).Assembly.Location,}); var compilerResult = provider.CompileAssemblyFromFile(parameters,file); if (compilerResult.Errors.Count > 0) { compilerResult.Errors.Cast<object>().ToDelimitedString(Environment.NewLine).Dump(); throw new Exception(); } var assembly = Assembly.Load(parameters.OutputAssembly); //var assembly = compilerResult.CompiledAssembly; // this method works var type = assembly.GetTypes().Single(t => t.Name == "X"); } 解决方法
如果要从文件路径加载程序集,则需要使用方法
.LoadFile :
var assembly = Assembly.LoadFile(parameters.OutputAssembly); ^^^^ 根据文档,方法
它需要一个程序集名称,如SampleAssembly,Version = 1.0.2004.0,Culture = neutral,PublicKeyToken = 8744b20f8da049e3 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |