Alteração da interface entre versões - como gerenciar?

Aqui está uma questão desagradável em que entramos no site do cliente. O cliente possui cerca de 100 estações de trabalho, nas quais implantamos a versão 1.0.0 do nosso produto "MyApp".

Agora, uma das coisas que o produto faz é carregar um suplemento (chame-o "MyPlugIn", que ele primeiro procura em um servidor central para ver se há uma versão mais nova e, se for, copia esse localmente e carrega o suplemento usandoAssembly.Load e chama uma certa interface conhecida. Isso está funcionando bem há vários meses.

Então o cliente queria instalar a v1.0.1 do nosso produto em algumas máquinas (mas não em todas). Que veio com uma versão nova e atualizada do MyPlugIn.

Mas então veio o problema. Há uma DLL compartilhada, referenciada por MyApp e MyPlugIn, chamada MyDLL, que possui o métodoMyClass.MyMethod. Entre a v1.0.0 e a v1.0.1, a assinatura deMyClass.MyMethod mudou (um parâmetro foi adicionado). E agora a nova versão do MyPlugIn faz com que os aplicativos do cliente v1.0.0 falhem:

Method não encontrado: MyClass.MyMethod (System.String)

O cliente não deseja implantar a v1.0.1 em todas as estações do cliente, sendo que a correção incluída na v1.0.1 era necessária apenas para algumas estações de trabalho e não é necessário implementá-la em todos os clientes. Infelizmente, ainda não estamos usando o ClickOnce ou outros utilitários de implantação em massa, portanto, a implementação da v1.0.1 será um exercício doloroso e desnecessári

Existe alguma maneira de escrever o código no MyPlugin para que ele funcione igualmente bem, independentemente de estar lidando com o MyDLL v1.0.0 ou v1.0.1? Talvez haja alguma maneira de investigar uma interface esperada usando reflexão para ver se ela existe, antes de realmente chamá-la?

EDITAR Também devo mencionar - temos alguns procedimentos de controle de qualidade bastante rigorosos. Como a v1.0.1 foi lançada oficialmente pelo controle de qualidade, não temos permissão para fazer alterações no MyApp ou MyDLL. A única liberdade de movimento que temos é alterar o MyPlugin, que é um código personalizado escrito especificamente para esse client

questionAnswers(14)

yourAnswerToTheQuestion