Невозможно загрузить сборку с помощью службы Windows - PullRequest
1 голос
/ 14 марта 2010

Я создал службу Windows в C # VS2008, которая использует ссылку на внешнюю библиотеку классов для записи. Я добавил ссылку на это в 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 в другой каталог?

Ответы [ 4 ]

1 голос
/ 25 сентября 2013

Я столкнулся с точно такой же ошибкой.

Рабочий каталог служб отличается от каталога приложения (обычно 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;
1 голос
/ 14 марта 2010

Возможно, что vcribAPI.dll зависит и от других сборок. Я предлагаю использовать Reflector и открыть dll, чтобы посмотреть, на какие другие dll он может ссылаться.

0 голосов
/ 14 марта 2010

Есть ли у вашей службы права на чтение в папке?

0 голосов
/ 14 марта 2010

Есть ли в сборке другие библиотеки или сборки, от которых это зависит?

Если это так, они также должны находиться в этом каталоге.

Чтобы быть уверенным, запустите Журнал загрузчика сборки (журнал объединения). См. this howto (Ошибки загрузки отладочной сборки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...