La raison pour laquelle cela fonctionnait en VB, et non en C#, n'avait rien à voir avec les assemblages.
Le constructeur par défaut de WebControl est protégé. VB et C# ont des interprétations différentes de ce que signifie "protégé".
Dans VB, vous pouvez accéder à un membre protégé d'une classe à partir de n'importe quelle méthode de tout type dérivant de la classe.
C'est, VB permet le code de compiler:
class Base
protected m_x as integer
end class
class Derived1
inherits Base
public sub Foo(other as Base)
other.m_x = 2
end sub
end class
class Derived2
inherits Base
end class
Parce qu'un « Derived1 » est une base, il peut accéder aux membres protégés des « autres », ce qui est également une base.
C# prend un point de vue différent. Cela ne permet pas l'accès "latéral" que VB fait. Il indique que l'accès aux membres protégés peut être effectué via "this" ou tout objet du même type que la classe qui contient la méthode. Parce que "Foo" est défini ici dans "Derived1", C# permettra seulement à "Foo" d'accéder aux membres "Base" d'une instance "Derived1". Il est possible que "other" soit quelque chose qui ne soit pas un "Derived1" (il pourrait, par exemple, être un "Derived2"), et donc il n'autorise pas l'accès à "m_x".
Dans ce cas de code, VB autorisait un accès "latéral" au constructeur "WebControl".
C#, cependant, ne l'a pas fait.
En fait, il y a des endroits dans VB où vous pouvez tous le constructeur que vous ne pouvez pas en C#. C'est la raison pour laquelle il a eu cette erreur. Voir mon message ci-dessous pour plus de détails. –