2013-03-28 61 views
1

我有我在正常AssemblyResolve方式正常應用已經解決了一個問題,那就是創建一個事件如AssemblyResolve在Windows服務C#

AppDomain.CurrentDomain.AssemblyResolve += EmbeddedAssemblyResolver; 

凡EmbeddedAssemblyResolver看起來像

private static Assembly EmbeddedAssemblyResolver(object sender, ResolveEventArgs args) 
    { 
      String resourceName = Assembly.GetExecutingAssembly().FullName.Split(',').First() + "." + new AssemblyName(args.Name).Name + ".dll"; 
      using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) 
      { 
       if (stream != null) 
       { 
        Byte[] assemblyData = new Byte[stream.Length]; 
        stream.Read(assemblyData, 0, assemblyData.Length); 
        return Assembly.Load(assemblyData); 
       } 
      } 
     return null; 
    } 

在應用程序中,所有groovy都可以工作,我將所有的dll嵌入到應用程序中,然後使用loader加載。但是對於我想以同樣方式工作的服務,情況並非如此,我在事件日誌中獲得的所有內容都是FileNotFound異常。我在Program.cs的Main()方法中運行上面的代碼,除了加載服務運行並鏈接到沒有動態程序集外,該方法幾乎沒有其他任何東西。這裏是代碼

static void Main() 
    { 
     ServiceBase[] ServicesToRun; 
     ServicesToRun = new ServiceBase[] 
      { 
       new ServiceLoader() 
      }; 
     ServiceBase.Run(ServicesToRun); 
    } 

有誰知道爲什麼解析器在一個應用程序,但不是在Windows服務?

回答

0

它看起來像我是一個白癡,我嵌入錯誤的DLL,我嵌入正確的一個,它的一切工作。

+3

這對任何人都沒有幫助,請刪除您的問題。 – 2013-03-28 11:24:33