2014-02-12 51 views
1

下面,我創建的方法正在註冊。 但我得到: 「regasm:警告ra0000:沒有類型未註冊」 取消註冊。RegAsm Unregister問題

private static void ExecuteRegAsm(string comObjectPath, string typeLibraryName, string regAsmPathToExecute, string regAsmParameter = null) 
    { 
     var startInfo = new ProcessStartInfo 
     { 
      CreateNoWindow = false, 
      UseShellExecute = false, 
      FileName = regAsmPathToExecute, 
      WindowStyle = ProcessWindowStyle.Hidden 
     }; 

     switch (regAsmParameter) 
     { 
      case null: 
       startInfo.Arguments = comObjectPath + " /tlb:" + typeLibraryName + " /Codebase"; 
       break; 
      case "/u": 
      case "-u": 
       startInfo.Arguments = "/u " + comObjectPath; 
       break; 
     } 

     using (var exeProcess = Process.Start(startInfo)) 
     { 
      if (exeProcess != null) exeProcess.WaitForExit(); 
     } 
    } 

如何解決這個問題?

+0

我創建了一個自定義COM對象僅用於測試目的。是的,它內有一門課。 (帶有默認的ctor)和2個沒有功能的接口以及類。 –

+0

檢查這個http://stackoverflow.com/questions/8054039/regasm-ra0000-no-types-were-registered – Sameer

+0

我已經檢查了許多類似的問題類似的帖子。這個帖子是沒有道理的。我的問題與此不同。但是謝謝你的關心。 –

回答

1

我已經解決了這個問題,通過添加/ tlb:屬性和對象的類型庫名稱作爲代碼的值。下面的方法正在工作:

private static void ExecuteRegAsm(string comObjectPath, string typeLibraryName, string regAsmPathToExecute, string regAsmParameter = null) 
    { 
     var startInfo = new ProcessStartInfo 
     { 
      CreateNoWindow = false, 
      UseShellExecute = false, 
      FileName = regAsmPathToExecute, 
      WindowStyle = ProcessWindowStyle.Hidden 
     }; 

     switch (regAsmParameter) 
     { 
      case null: 
       startInfo.Arguments = comObjectPath + " /tlb:" + typeLibraryName + " /Codebase"; 
       break; 
      case "/u": 
      case "-u": 
       startInfo.Arguments = comObjectPath + " /tlb:" + typeLibraryName + " /u"; 
       break; 
     } 

     using (var exeProcess = Process.Start(startInfo)) 
     { 
      if (exeProcess != null) 
      { 
       exeProcess.WaitForExit(); 
      } 
     } 
    }