Не удалось найти ошибку сборки при использовании <codeSubDirectories>в web.config - PullRequest
1 голос
/ 07 января 2010

У меня есть веб-сайт, который использует как c #, так и vb.net в разделе app_code. Различные языки разделены в свою собственную папку и правильно настроены в файле web.config.

<codeSubDirectories>
    <add directoryName="BasicCode"/>
    <add directoryName="CSharpCode"/>
  </codeSubDirectories>

Это отлично работает в 95% случаев. В производстве, использующем 2 сервера с балансировкой нагрузки, я время от времени получаю сообщение об ошибке следующего содержания:

"Невозможно найти сборку «App_SubCode_BasicCode.xxx, Версия = 0.0.0.0, Культура = Нетурал, PublicKeyToken = нуль.

Сайт размещен в IIS7, и я думаю, что он как-то связан с именем библиотеки DLL, назначенной во время динамической компиляции. Я не вижу этой проблемы в среде с одним сервером. Может ли это быть потому, что, когда сеанс сбалансирован со вторым сервером, динамически скомпилированное имя DLL отличается?

1 Ответ

0 голосов
/ 14 января 2010

Вполне возможно, что два разных сервера генерируют разные имена для динамических сборок; на самом деле я думаю, что это, вероятно, мертвый сертификат.

Однако возникает вопрос: почему один сервер генерирует имя сборки, которое затем пытается использовать другой? Со стандартным сайтом Asp.Net со сбалансированной нагрузкой вы никогда этого не увидите.

Существуют ли какие-либо типы, определенные в коде веб-сайта, которые затем сериализуются (либо для просмотра состояния, либо для общего состояния сеанса)?

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

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

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