0

我有一个问题,我在正常的应用程序中以正常的 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;
    }

在应用程序中,这一切都很正常,我将所有的 dll 嵌入到应用程序中,然后它们使用加载器加载。但是对于我想要以相同方式工作的服务来说,情况并非如此,我在事件日志中得到的只是 FileNotFound 异常。我在 Program.cs Main() 方法中运行上述代码,该方法除了加载要运行的服务和链接到无动态程序集之外几乎没有什么其他作用。这是代码

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

有谁知道为什么解析器在应用程序中工作,而不是在 Windows 服务中工作?

4

1 回答 1

0

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

于 2013-03-28T11:11:35.293 回答