2013-03-28 58 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