我有一个问题,我在正常的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服务中?
答案 0 :(得分:0)
看起来我是个白痴,我嵌入了错误的dll,我嵌入了正确的dll,这一切都有效。