AssemblyResolve在Windows服务中c#

时间:2013-03-28 09:37:18

标签: c# .net windows assemblies

我有一个问题,我在正常的AssemblyResolve方式中通过正常的应用程序解决了这个问题,即通过创建一个事件,例如

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嵌入到应用程序中,然后使用加载程序加载。但对于我希望以相同方式工作的服务也是如此,我在事件日志中得到的只是FileNotFound异常。我在Program.cs Main()方法中运行上面的代码,除了加载要运行的服务和链接到没有动态程序集之外,该方法几乎没有其他功能。这是代码

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

有谁知道解析器为何在应用程序中运行,而不是在Windows服务中?

1 个答案:

答案 0 :(得分:0)

看起来我是个白痴,我嵌入了错误的dll,我嵌入了正确的dll,这一切都有效。