由于一些参考程序集错误,无法编译代码输出
本文关键字:编译 代码 输出 于一些 参考 程序集 错误 | 更新日期: 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"));
我引用:
- http://blogs.msdn.com/b/lukeh/archive/2007/07/11/c-3-0-and-codedom.aspx
- 。CodeDom编译器生成奇怪的错误
- 在问题的帖子中评论。:)