2012-05-11 1 views
0

Я пишу программу со Skype API (Skype4COM) и решил сделать компиляцию во время выполнения. Все работало отлично, прежде чем я решил использовать в своей библиотеке API Skype. Когда я попытался это сделать, программа сказала мне: «Файл метаданных c: \ Users \ Алексей \ Dropbox \ Skype Bot \ Skype Bot \ bin \ Debug \ Skype4COM.dll не может быть открыт -« Была сделана попытка загрузить программа с неправильным форматом ». Как я могу это исправить? Вот код:Ошибка в библиотеке CompilerParameters class skype (Skype4COM)

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; 
     } 
    } 

ответ

1

Сначала убедитесь, что ваш длл был registered.

Если вы создаете тестовый проект и добавляете ссылку COM на Skype4COM.dll, тогда Visual Studio создаст сборку взаимодействия Interop.Skype4COM.dll. Вы должны добавить ссылку на этот файл (так же, как вы добавили ссылку на System.Core.dll, например).

+0

Спасибо, но теперь он говорит: «Файл метаданных« Interop.Skype4COM.dll »не найден». –

+0

@NegiRussian Вы должны создать его вручную (я предлагаю вам создать фиктивный проект VS, где вы добавите ссылку COM, а затем просто скопируйте сборку взаимодействия). –

+0

Я сделал это, я зарегистрировал эту библиотеку, создал новый проект и добавил его к ссылкам :( –