2008-11-27 4 views
5

Я увидел что-то о необходимости иметь сборку для типа первого аргумента, переданного функции. Я думаю, что нет, я не могу понять, что мне не хватает.Почему System.Web.Hosting.ApplicationHost.CreateApplicationHost throw System.IO.FileNotFoundException?

Этот код является сервисом. Я запускал службу под учетной записью пользователя NETWORK SERVICES, когда я сменил учетную запись на сеанс, с которым я вошел в систему, работала нормально. Но в чем разница, и как я могу заставить его работать для пользователя NETWORK SERVICES.

ответ

-3

Наконец-то я нашел ответ: похоже, что тип, присвоенный ApplicationHost.CreateApplicationHost(), должен быть в сборке, расположенной в GAC. Простой и глупый :)

+0

Прохладный. Вы нашли это в какой-то документации, на которую я могу посмотреть ... или это было методом проб и ошибок? – 2009-01-19 14:32:52

0

Network Service - это встроенный учет, который имеет очень ограниченный доступ (по уважительной причине) к ресурсам. Вероятно, вы не должны его изменять, потому что вы откроете свой сайт для других потенциальных уязвимостей.

Если вам абсолютно необходимо, см. here, как настроить его для доступа к другим ресурсам.

0

Я думаю, что это более тесно связано с учетной записью сетевых служб или защитой кода доступа и не имеет ничего общего с GAC. Я использую CreateApplicationHost() для создания узла ASP.Net в проекте MS Test, и он работает как чемпион. Тип, который я использую, отсутствует в сборке, которая развернута в GAC или даже сильно названа (она определена в TestProject).

Вы должны любить эти типы несоответствий ... это держит жизнь интересной.

1

У меня была эта проблема. Я думаю, что среда выполнения пытается загрузить сборку, содержащую тип, переданный в качестве первого аргумента CreateApplicationHost, и он не находит его

По какой-то странной причине это сработало, когда я создал каталог bin в моем физическом каталоге (третий аргумент), содержащий exe или сборку, которая содержит тип, который он пытался загрузить.

Я не знаю, почему она не смотрит в рабочем каталоге первой ...

4

скопировать бинарный файл в бункерном папку вашего веб-приложение также будет исправить это.

2

Кстати, страница this содержит немного больше информации по этой теме и возможный способ обхода проблемы GAC и копирования вашей сборки в папку bin. На данный момент эта страница несколько лет, но она по-прежнему кажется актуальной.

0

Я не мог заставить это работать либо в .NET2 на Windows 2008 (64-бит, но я не думаю, что имело значение). Он работал, когда мой пользователь был локальным администратором, но я не хочу, чтобы мои службы выполнялись с повышенными привилегиями. Я искал высоко и низко и, наконец, понял это (без добавления сборки к GAC, в равной степени плохо для меня): Создайте файл web.config для моего собственного сайта, который настраивает папку bin для зондирования. До того, как у меня не было файла web.config, поскольку все мои сайты обрабатывались в коде. Это мой конфигурационный файл теперь выглядит так:

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="bin"/> 
    </assemblyBinding> 
    </runtime> 
</configuration> 
Смежные вопросы