C# 无法使用windows服务加载程序集

C# 无法使用windows服务加载程序集,c#,.net,windows-services,C#,.net,Windows Services,我在C#VS2008中创建了一个windows服务,它使用对外部类库的引用来编写。我在VS2008中添加了对它的引用。当我运行启动服务时,它在尝试访问外部DLL时引发异常: Could not load file or assembly 'vcribAPI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file speci

我在C#VS2008中创建了一个windows服务,它使用对外部类库的引用来编写。我在VS2008中添加了对它的引用。当我运行启动服务时,它在尝试访问外部DLL时引发异常:

Could not load file or assembly 'vcribAPI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

DLL与service.exe文件位于同一目录中。对于windows服务,我是否需要做一些特殊的事情,比如将DLL放在另一个目录中

程序集是否有其他DLL或它所依赖的程序集

如果是这样,它们也需要在这个目录中


为确保这一点,启动装配加载程序日志(fusion日志)。请参阅howto(调试程序集加载失败)。

可能是vcribAPI.dll也依赖于其他程序集。我建议使用并打开该dll以查看它可能引用的其他dll。

您的服务是否有权读取该文件夹?

我遇到了完全相同的错误

服务的工作目录不同于应用程序目录(通常为C:\Windows\System32)

例如,如果您试图定位部署在应用程序目录中的程序集,则方法
AssemblyName.GetAssemblyName
将抛出
FileNotFoundException

在这种情况下,解决方案是在加载程序集之前使用应用程序目录定义
Environment.CurrentDirectory

示例代码:

const string SCHEMA_FILE = @"file:\";
var appAssembly = Assembly.GetExecutingAssembly();
var path = Path.GetDirectoryName(appAssembly.CodeBase);
if (path.StartsWith(SCHEMA_FILE))
    path = path.Remove(0, SCHEMA_FILE.Length);
Environment.CurrentDirectory = path;

使用Fuslogvw.exe工具对此进行故障排除。这是否与虚拟婴儿床项目相关?是的。我是主要开发者之一:)看看插件示例页面,看起来api需要mysql.data.dll,不是吗?()还有另一个问题,您是在开发此服务的同一台计算机上运行此服务,还是在另一台计算机上运行此服务?我编写了vcribAPI,因此知道它不依赖任何其他程序集。@布赖恩:好的,那么是的,您应该使用@nobugz comment:use fuslogvw.exe()查看程序集绑定日志以获取线索。加载dll的是.Net运行时。如果它可以启动服务exe,它还可以从同一文件夹加载DLL。