回 帖 发 新 帖 刷新版面

主题:强名称程序集的动态编译

我现在遇到这样一个问题:
我有一个强名称签名的程序集放在GAC里,这个程序集读取一段文本来动态编译这 段文本,然后调用编译后的程序集。代码如下:
/**********************************************************/
static public Assembly CompileInMemoryFromString(string strSource,string strClassName,out CompilerResults results)
{
    CodeDomProvider provider = new CSharpCodeProvider();
    CompilerParameters options = new CompilerParameters();
    options.IncludeDebugInformation = false;
    options.OutputAssembly = strClassName;    //strClassName是随机产生的一个字符串
    options.GenerateExecutable = false;
    options.GenerateInMemory = true;

    options.ReferencedAssemblies.Add("mscorlib.dll");
    options.ReferencedAssemblies.Add("System.dll");
    options.ReferencedAssemblies.Add("System.Data.dll");
    options.ReferencedAssemblies.Add("System.Deployment.dll");
    options.ReferencedAssemblies.Add("System.Drawing.dll");
    options.ReferencedAssemblies.Add("DrawTools.dll");

    results = provider.CompileAssemblyFromSource(options, strSource);//strSource里面就是要编译的源代码
    .......
}
/**********************************************************/
运行这段代码的时候会出现错误:
1、results的CompiledAssembly的Message为“未能加载文件或程序集 “file:///E:\2008.04.24\Picture\TestForm\bin\Debug\Area1130BB8C”或它的某 一个依赖项。系统找不到指定的文件。”
我已经设定了GenerateInMemory,为什么它还要去找文件呢?

2、results的CompiledAssembly的FusionLog为:
=== 预绑定状态信息 ===
日志: 用户 = XUZHENG\Administrator
日志: Where-ref 绑定。位置 = E:\2008.04.24\Picture\TestForm\bin\Debug\Area1130BB8C
日志: Appbase = file:///E:/2008.04.24/Picture/TestForm/bin/Debug/
日志: 初始 PrivatePath = NULL
调用程序集: (Unknown)。
===
日志: 此绑定从 LoadFrom 加载上下文开始。
警告: 将不在 LoadFrom 上下文中探测本机映像。仅在默认加载上下文中探测本机 映像,例如,使用 Assembly.Load()。
日志: 正在使用应用程序配置文件: E:\2008.04.24\Picture\TestForm\bin\Debug\TestForm.vshost.exe.Config
日志: 使用 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config 的计 算机配置文件。
日志: 相同的绑定已出现过,因 hr = 0x80070002 而失败。

我不太清楚问题出在哪里,有谁能解释一下么?

回复列表 (共1个回复)

沙发

自己顶
没人会么?。。。郁闷

我来回复

您尚未登录,请登录后再回复。点此登录或注册