我想使用C#CSharpCodeProvider在飛行中編譯非託管dll。編譯成功,但是,該DLL不起作用。 這裏是我想要做的事:csharpcodeprovider是否支持dllexport?
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中編譯成功並且工作正常。
它究竟如何不起作用?你遇到了什麼錯誤? – svick
@svick如果我在CSharpCodeProvider編譯的DLL上執行dumpbin/exports,則該DLL沒有可用的時間戳或函數。但是,使用MSVC 2012編譯的DLL顯示使用dumpbin/exports的時間戳和函數。 – user2855803