C# badimageformatexception动态代码生成

C# badimageformatexception动态代码生成,c#,code-generation,badimageformatexception,csharpcodeprovider,dynamic-code,C#,Code Generation,Badimageformatexception,Csharpcodeprovider,Dynamic Code,我试图用CSharpCodeProvider动态生成一个可执行文件,它的唯一目的是从特定的dll调用一个方法。当我执行生成的文件时,我得到一个BadImageFormatException 我已经将平台设置为x86。当我手动编写调用该方法的代码并在VisualStudio中调试它时,它工作得非常好 这是可执行文件的代码: using DLLName; namespace ExampleNamespace { class Program { public stat

我试图用CSharpCodeProvider动态生成一个可执行文件,它的唯一目的是从特定的dll调用一个方法。当我执行生成的文件时,我得到一个BadImageFormatException


我已经将平台设置为x86。当我手动编写调用该方法的代码并在VisualStudio中调试它时,它工作得非常好

这是可执行文件的代码:

using DLLName;

namespace ExampleNamespace
{
    class Program
    {
        public static void Main(string[] args)
        {
            MyClass obj = new MyClass();
            obj.MyMethod();
        }
    }
}
在动态编译代码之前,我通过

compilerParameters.ReferencedAssemblies.Add("PathToDLL");
我将可执行文件写入与dll相同的目录

编辑

这是我用来调用编译器的代码:

CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();

parameters.GenerateExecutable = true;
parameters.GenerateInMemory = false;
parameters.OutputAssembly = @"DirectoryOfDLL\MyMethod.exe";
parameters.ReferencedAssemblies.Add("PathToDLL");

provider.CompileAssemblyFromSource(parameters, code);

“我已经将平台设置为x86”您是否使用options=“/platform:x86”执行此操作?如果是这样,您需要提供用于编译的代码。请添加实际调用编译器的代码。很可能您仍然存在位不匹配(例如生成的可执行文件是“任何平台”并在x64系统上运行,而DLL是x86)。确实需要指定位吗?“Any”还不够吗?@LaurenceAdams:OP正在生成一个引用DLL的可执行文件。如果DLL是x86,并且您运行的平台是x64,那么可执行文件也必须指定为x86,而不是“Any”(默认为x64)。当然,为了实现互操作性,DLL确实应该具有平台“Any”(那么,可执行文件的位就无关紧要了)。@Jerown Mostert:我完全理解x86、x64和Any之间的区别,以及BadImageFormatException的含义。OP似乎随机声明他/她将平台设置为x86。当OP试图解决BadImageFormatException时,询问OP是否有必要执行此步骤是完全有效的。