由于一些参考程序集错误,无法编译代码输出

本文关键字:编译 代码 输出 于一些 参考 程序集 错误 | 更新日期: 2023-09-27 18:15:25

我的问题是:

有一个项目叫做myframework。它定义了一些扩展方法,如下所示:

namespace myframework
{
    public static class Helpers
    {
        public static bool ContainsAll(this string obj, string[])
        {
            return true;
        }
    }
}

它也有一些其他的东西,比如接口,等等。

我通过System生成了第二个类。CodeDom类。生成的输出如下所示:

using myframework;

public class A: IMyFrameworkInterface
{
    public void foo()
    {
        string s ="HELLO";
        if(s.ContainsAll(some_arr))
            return;
    }
        //More methods defined...
}

我传递的编译器选项在实际编译调用之前创建,它引用了正确的程序集

var cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("myframework.dll");

代码编译模块在不同的项目中编写。负责此操作的特定类还很好地为我们提供了对CompilerError对象列表的访问,通过该列表我们可以了解编译的结果。

Issue1:当我在一个asp.net项目中尝试这个时,编译器抛出错误,说它找不到元数据文件myframework.dll(尽管它在项目中被引用)。

Issue2:当我尝试它与windows窗体项目。它给出了一个不同的错误。这次说的是字符串不包含ContainsAll()

的定义

如何解决这两个具体问题?

由于一些参考程序集错误,无法编译代码输出

经过一番挖掘,我找到了答案。我使用的是。net框架3.5。默认情况下,codedom编译器api的目标是框架的v2.0版本。因此,您必须手动指定正确的框架:

var cp = new CompilerParameters(
    new Dictionary<string,string>() { {"CompilerVersion", "v3.5"} });

要使编译在asp.net环境中工作,您必须实际将引用指向正确的位置。因此,您必须执行如下操作:

cp.ReferencedAssemblies.Add(
    HttpContext.Current.Server.MapPath(
        "bin''myframework.dll"));
我引用

:

  1. http://blogs.msdn.com/b/lukeh/archive/2007/07/11/c-3-0-and-codedom.aspx
  2. 。CodeDom编译器生成奇怪的错误
  3. 在问题的帖子中评论。:)