DLL-библиотеки .NET связаны статически или динамически? - PullRequest
0 голосов
/ 08 мая 2018

Я совершенно новичок в C # и теперь должен поддерживать весь набор тестов, написанный на C #. Я использую Visual Studio 2013 на Windows 2008 Server.

Моя проблема заключается в следующем:

У меня был метод класса с подписью

public CommandInfo SetDns(String ipAdr1)

Я изменил его, чтобы добавить необязательный аргумент

public CommandInfo SetDns(String ipAdr1, String ipAdr2="")

Я просто перестроил эту DLL и подумал, что все остальные DLL, которые ссылаются на это, не увидят никакой разницы

Но, похоже, старые библиотеки DLL теперь не работают с ошибкой

System.MissingMethodException: метод не найден: 'My.TestBeds.CommandInfo My.TestBeds.DDR.Net.SetDns (System.String)'.

Мои запросы:

  1. Это ожидается? Придется перестраивать и все библиотеки DLL?

Проблема, с которой я столкнулся, заключается в том, что я тоже должен зарегистрировать DLL из-за некоторых ограничений. Поэтому я хотел восстановить и зарегистрировать только соответствующие: (

  1. Если мне нужно перестроить все остальные библиотеки DLL, есть ли способ узнать, какие библиотеки DLL имеют эту ссылку в качестве справочной и нужно перестроить?

1 Ответ

0 голосов
/ 08 мая 2018

Да, добавление параметра является критическим изменением, даже если это необязательно. IL содержит точную подпись, которую разрешил компилятор, а не только имя. Типичным способом реализации этого изменения без влияния на совместимость будет добавление перегрузки - что-то вроде:

public CommandInfo SetDns(string ipAdr1) { return SetDns(ipAdr1, ""); }
public CommandInfo SetDns(string ipAdr1, string ipAdr2) {...}

В противном случае: да, это серьезное изменение, и вам нужно будет восстановить всех потребителей.

...