C# csharpcodeprovider是否支持dllexport?

C# csharpcodeprovider是否支持dllexport?,c#,unmanaged,dllexport,csharpcodeprovider,C#,Unmanaged,Dllexport,Csharpcodeprovider,我正在尝试使用C#CSharpCodeProvider动态编译一个非托管dll。编译成功,但是dll不工作。 以下是我试图做的: provOptions.Add("CompilerVersion", "v4.0"); var options = new CompilerParameters(); options.GenerateExecutable = false; options.CompilerOptions = "/platform:x86 /target:library"; option

我正在尝试使用C#CSharpCodeProvider动态编译一个非托管dll。编译成功,但是dll不工作。 以下是我试图做的:

provOptions.Add("CompilerVersion", "v4.0");
var options = new CompilerParameters();
options.GenerateExecutable = false;
options.CompilerOptions = "/platform:x86 /target:library";
options.ReferencedAssemblies.Add("RGiesecke.DllExport.Metadata.dll");
var provider = new CSharpCodeProvider();
string sourceFile = "tmp2.cs"; 
CompilerResults cr = provider.CompileAssemblyFromFile(options, sourceFile);
下面是C#tmp2.cs:

using RGiesecke.DllExport;
using System.Runtime.InteropServices;
using System;
using System.Text;

class Test
{
  [DllExport("add", CallingConvention = CallingConvention.Cdecl)]
  public static int TestExport(int left, int right)
  {
     return left + right;
  } 
}

我做错了什么?CSharpCodeProvider不支持Dllexport吗?tmp2.cs在MS VS C#2012中编译成功,运行良好。

实际上
CSharpCodeProvider
不支持
DllExport
。Visual Studio也没有使用C#编译器

代码在Visual Studio中工作的原因是:

一组编译时库(无需部署)和一个生成任务,使您能够将函数从托管代码导出到本机应用程序

第二部分很重要:为了让它工作,它需要运行一个构建任务。因此,如果您在VisualStudio中安装该包,它将在正常编译后运行该构建任务

但是,如果您只是引用DLL(您使用
CSharpCodeProvider
执行此操作,但是如果您使用VS执行此操作,则其行为将相同),那么它将不起作用


因此,如果您希望
UnmanagedExports
CSharpCodeProvider
一起工作,您也需要找到一些方法来运行构建任务。最简单的方法可能是从构建任务中复制命令,然后使用
Process.Start()

运行它们。它到底是如何工作的?您遇到了什么错误?@svick如果我对CSharpCodeProvider编译的DLL执行dumpbin/exports操作,则该DLL没有可用的时间戳或函数。但是,使用MSVC 2012编译的DLL显示了一个时间戳和一个使用dumpbin/exports的函数。您能告诉我有关此解决方案的更多详细信息吗?@Behrooz您需要什么样的详细信息?如果您有特定的问题,最好问一个新问题。谢谢,我需要更多关于如何使用CSharpCodeProvider运行生成任务的详细信息?@Behrooz您不能
CSharpCodeProvider
只是编译器。正如我在回答中所说,一种简单的方法可能是
Process.Start()