Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Web项目中的CodeDomProvider代码生成失败,但控制台应用程序中的代码生成失败_C#_.net - Fatal编程技术网

C# Web项目中的CodeDomProvider代码生成失败,但控制台应用程序中的代码生成失败

C# Web项目中的CodeDomProvider代码生成失败,但控制台应用程序中的代码生成失败,c#,.net,C#,.net,我正在使用CodeDomProvider在内存中编译一些C代码,然后执行代码。在控制台应用程序中运行代码时,一切正常。它进行编译,我可以执行它并得到结果 然而,当我试图在web应用程序中运行它时,同样的代码失败了。我得到一个BadImageFormatException,内部异常是坏的IL格式 web应用程序与控制台应用程序之间是否存在一些我不知道的限制 谢谢你的建议 我正在运行.NET4.0 编辑:我注意到,在我添加对项目中另一个程序集的引用之前,一切都正常。因此,我有一个类库,其中包含一个包

我正在使用CodeDomProvider在内存中编译一些C代码,然后执行代码。在控制台应用程序中运行代码时,一切正常。它进行编译,我可以执行它并得到结果

然而,当我试图在web应用程序中运行它时,同样的代码失败了。我得到一个BadImageFormatException,内部异常是坏的IL格式

web应用程序与控制台应用程序之间是否存在一些我不知道的限制

谢谢你的建议

我正在运行.NET4.0

编辑:我注意到,在我添加对项目中另一个程序集的引用之前,一切都正常。因此,我有一个类库,其中包含一个包含实体模型的项目引用。我添加它作为参考,如:

CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
CompilerParameters cp = new CompilerParameters();

cp.GenerateInMemory = true;
cp.ReferencedAssemblies.Add("mscorlib.dll");
cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("System.Core.dll");
cp.ReferencedAssemblies.Add("System.Data.Linq.dll");
cp.ReferencedAssemblies.Add("System.Data.Entity.dll");
cp.ReferencedAssemblies.Add("MyApp.Data.dll");

var results = provider.CompileAssemblyFromSource(cp, source);
var assm = results.CompiledAssembly;
如果我只是让我的类有一个返回字符串的方法,并删除对MyApp.Data.dll的add引用,那么一切都可以正常工作。一旦我把那个引用加回去,它就失败了


有什么想法吗?

我在去年完成的几乎每个项目中都会通过web应用程序动态创建代码,因此这绝对是可行的/实用的

安全性可能有所不同,但您将收到权限异常,可能不是
BadImageFormatException

另一个区别是控制台应用程序的默认构建配置文件是x86 4.0客户端配置文件,而web应用程序的默认构建配置文件是任何CPU,4.0。


您可能想发布您的实际代码;有人可能会发现问题。

因为添加引用的程序集失败,所以我做了一些尝试并遇到了问题。基本上,这是一个需要使用Server.MapPath以便代码能够找到dll的问题

cp.ReferencedAssemblies.Add(HttpContext.Current.Server.MapPath("bin\\MyApp.Data.dll"));

现在它工作了!所以这是一个简单的错误

谢谢。我希望这是件简单的事我很快会发布一些代码。