Assembly.CreateInstance не срабатывает
От: Karn  
Дата: 21.09.06 09:06
Оценка:
Ситация такая:
Есть сайт.
Есть библиотека InternalLibrary
Есть библиотека Plugin.
В InternalLibrary определен интерфейс IPluginCustomAction
public interface IPluginCustomAction
    {
        void PerformCustomAction(CustomActionRequest request, CustomActionResponse response);
    }


В Plugin добавлена reference на проект InternalLibrary и есть такой код класса, реализующего интерфейс из InternalLibrary

public class CountryList : IPluginCustomAction
{
    #region IPluginCustomAction Members
    public void PerformCustomAction( CustomActionRequest request, CustomActionResponse response )
    {
           ...
        }
}



В сайт тоже добавлена ссылка на InternalLibrary и с сайта дергается метод в InternalLibrary и в этом методе есть такой код
*plugin.AssemblyPath — ссылается на расположение plugin dll На диске
try {
    Assembly pluginAssembly = Assembly.LoadFrom( plugin.AssemblyPath );
    IPluginCustomAction customPlugin = (IPluginCustomAction) pluginAssembly.CreateInstance( plugin.Name + "." + plugin.ActionClass, true );
    customPlugin.PerformCustomAction( request, response );
} catch( Exception exception ) {
    LogService.WriteException( exception, "Business" );
}


На строчке с CreateInstance выпадает exception.

{"Method 'PerformCustomAction' in type 'Ars.Plugins.CountryList' from assembly 'Plugins, Version=1.0.0.27, Culture=neutral, PublicKeyToken=null' does not have an implementation.":"Ars.Plugins.CountryList"}

Дальше интересней. Создаем консольное приложение, которое выполняет приведенный выше код. Все отрабатывает нормально и без ошибок.
Добавляем в веб-приложение ссылку на ,b,kbjntre Plugin. Все начинает работать. Удаляем ссылку на плагин, перепускаем IIS и перебилдовываем веб-приложение. Все продолжает работать. Пересобираем все, заливаем на сервер — там по-прежнему не работает.

Где проблема и откуда такой странный exception —
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.