Почему System.Web.Hosting.ApplicationHost.CreateApplicationHost выдает исключение System.IO.FileNotFoundException?

Я видел кое-что о необходимости иметь сборку, доступную для типа первого аргумента, переданного функции. Я думаю, что это так, я не могу понять, что мне не хватает.

Этот код находится в сервисе. Я запускал службу под учетной записью пользователя «СЕТЕВЫЕ СЛУЖБЫ», когда я изменил учетную запись на учетную запись сеанса, в который я вошел, она работала нормально. Но в чем разница и как я могу заставить его работать для пользователя СЕТЕВЫХ УСЛУГ.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
3 601
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

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

Ответ принят как подходящий

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

Здорово. Вы нашли это в какой-то документации, которую я могу посмотреть ... или это было методом проб и ошибок?

Scott Langham 19.01.2009 17:32

проголосовали против, потому что сборка не обязательно должна быть в GAC

Simon 08.04.2010 01:21

Действительно, ставить сборку в GAC не нужно. Это связано с привязкой к сборке. Включите Fusion Logging, и вы точно увидите, где что-то пошло не так

Jeroen Landheer 04.09.2010 00:01

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

Вы должны любить такие несоответствия ... они делают жизнь интересной.

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

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

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

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

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

Я не мог заставить это работать ни в .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>

Другие вопросы по теме