我正在使用Skype API(Skype4COM)编写程序,并决定进行运行时编译。在我决定在我的编译Skype API库中使用之前,一切都运行良好。当我尝试这样做时,程序告诉我:“元数据文件'c:\ Users \Алексей\ Dropbox \ Skype Bot \ Skype Bot \ bin \ Debug \ Skype4COM.dll'无法打开 - '尝试加载格式错误的程序'“。我该怎么办呢? 这是代码:
public delegate object Do();
protected static string Compile(string str)
{
try
{
var csc = new CSharpCodeProvider(new Dictionary<string, string> { { "CompilerVersion", "v3.5" } });
CompilerParameters parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll", "System.dll", "SKYPE4COM.dll" }) { GenerateInMemory = true };
//parameters.LinkedResources.Add("Skype4COM.dll");
//parameters.EmbeddedResources.Add("SKYPE4COMLib.dll");
//parameters.ReferencedAssemblies.Add("");
CodeTypeReferenceExpression csSystemConsoleType = new CodeTypeReferenceExpression("System.Console");
CompilerResults results = csc.CompileAssemblyFromSource(parameters, str);
if (results.Errors.Count >= 1) return results.Errors[0].ErrorText;
Type t = results.CompiledAssembly.GetType("Program");
MethodInfo m = t.GetMethod("Method");
Do DoMethod;
DoMethod = (Do)Delegate.CreateDelegate(typeof(Do), m);
return DoMethod().ToString();
}
catch (Exception e)
{
return e.Message;
}
}
答案 0 :(得分:1)
首先确保你的dll已经registered。
如果您创建一个测试项目并向Skype4COM.dll
添加COM引用,则Visual Studio将创建一个互操作程序集Interop.Skype4COM.dll
。您必须添加对该文件的引用(例如,与添加对System.Core.dll
的引用的方式相同)。