Я модифицировал NHibernate; как я могу заставить Касла использовать сборку NH с другим ключом? - PullRequest
0 голосов
/ 25 марта 2011

Я внес изменения в NHibernate 2.1.2, и поэтому сражался с .NET и сильными именами сборок. Я настроил ResolveEventHandler для загрузки моей версии NHibernate, которую я подписал, которую я регистрирую перед созданием своей фабрики сессий:

Assembly ModifiedNHibernateAssemblyResolver(object sender, ResolveEventArgs args) {
    var name = new AssemblyName(args.Name);
    switch (name.Name) {
        case "NHibernate":
            return typeof(NHibernate.NHibernateUtil).Assembly;
    }
    return null;
}

Я получаю одиночные ссылки на «NHibernate.XmlSerializer, Version = 2.1.2.4000, Culture = нейтральный, PublicKeyToken = 3557c07e7d6e1f91» теперь, когда он подписан (а не один с этим токеном, за которым следует один с токеном = null), он не загружается при обнаружении Касла:

Could not load type NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle.
System.IO.FileLoadException: The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Когда он не был подписан, при загрузке SysCache произошел сбой, теперь он здесь, и я понятия не имею, почему. Я не вижу никаких ссылок на загрузку SysCache, поэтому я думаю, что порядок загрузки изменился, но моя проблема - сама ошибка. Единственными различиями между ними являются токены открытого ключа, версии одинаковы, у меня есть только одна сборка NHibernate, на которую я ссылаюсь в проекте путем просмотра (нет в GAC), и я застрял.

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


Редактировать: чтобы сделать этот вопрос более общим, поскольку, скорее всего, это общая проблема: как я могу загрузить сборку с токеном открытого ключа, отличным от ожидаемого в другом проекте?
Похоже, это означало бы смерть для внесения собственных изменений в проекты с открытым исходным кодом, если бы не было никакого способа, так как тогда вы не могли бы использовать его ни с чем. Если вы подпишете его, все, что его использует, прилипнет к вашему коду Если вы этого не сделаете, то, что подписано, не может вызвать ваш код ...

1 Ответ

0 голосов
/ 25 марта 2011

Я сделал это, собрав все источники с нуля, удалив подпись. Для меня это был самый простой курс, но может быть и лучшая альтернатива.

...