【发布时间】:2013-03-28 09:37:17
【问题描述】:
我有一个问题,我已经在正常的应用程序中以正常的 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 服务中不起作用?
【问题讨论】:
标签: c# .net windows assemblies