0

У меня есть приложение, которое ссылается на DLL, которая будет продолжать меняться в более новую версию (с обратной совместимостью).Ссылка dll без версии visual studio 2015

Мое приложение (встроенная визуальная студия 2015) будет работать с любой версией - проблема в том, что мне нужно ссылаться на dll, не указав версию, потому что последняя версия dll будет постоянно заменять DLL в моем проекте (офисные требования) и я не хочу, чтобы перекомпилировать мой проект каждый раз, когда длл обновляется

Я попробовал следующее:

  1. установка <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> в моем файле .csproj

  2. AppDomain.CurrentDomain.AssemblyResolve += delegate (object s, ResolveEventArgs re) 
    { 
        AssemblyName theName = new AssemblyName(re.Name); 
    
        if (theName.Name == "name, version, key") 
        { 
         return Assembly.LoadFile("name without version"); 
        } 
    
        return null; 
    }; 
    

im не совсем уверен, где поставить вторую вещь, которую я пробовал, но ничего не работает!

+0

Является ли версия версии нумерацией? Обычно второстепенные версии не вызовут проблем, как это делают основные версии. В ссылочных свойствах у вас установлен параметр «Специфическая версия» равным false? Вы смотрели на выполнение переадресации? Вы пытаетесь одновременно иметь несколько копий DLL в одном каталоге? –

+0

Нет - его не второстепенные версии - это DLL, которая часто обновляется до полной новой версии. Я попробовал установить определенную версию на false - это не сработало. Я читал, что это только время компиляции. не пытается иметь несколько копий dll - одна dll постоянно обновляется. пожалуйста помоги! –

+0

Является ли это "DLL, которая будет меняться" сильно подписан? –

ответ

0

Неправильный способ использования события AssemblyResolve -

Что-то вроде следующего:

AppDomain.CurrentDomain.AssemblyResolve += (sender, argsAssembly) => 
      { 
       if (argsAssembly.Name.StartsWith the name of your dll) 
        return Assembly.Load(load the dll); 
       return null; 
      }; 
0

решил это один из способов - но им все еще ищет лучший ответ -

я создал класс из сборки, загрузив мой DLL

как -

Assembly assemblyInstance=Assembly.Load(dll); 
Type[] asseblyTypes=assemblyInstance.GetTypes(); 

foreach(Type t in asseblyTypes) 
{ 
    if(t.fullName.Equals(name of class i want)) 
    { 
     try to get the method info by t.GetMethod(name,type of parameter) 
     and then do methodInfo.Invoke... 
    } 
} 

работ ... но идентификатор, как лучший ответ

Смежные вопросы