Причина, по которой это работало в VB, а не в C #, не имела ничего общего со сборками.
Конструктор по умолчанию для WebControl защищен.
VB и C # по-разному понимают, что означает "защищенный".
В VB вы можете получить доступ к защищенному члену класса из любого метода любого типа, производного от класса.
То есть VB позволяет компилировать этот код:
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
Поскольку Derived1 является базой, он может получить доступ к защищенным членам «other», которое также является базой.
C # принимает другую точку зрения. Это не позволяет "боковой" доступ, который делает VB.
В нем говорится, что доступ к защищенным элементам может быть сделан через «this» или любой объект того же типа, что и класс, содержащий метод.
Поскольку «Foo» здесь определено в «Derived1», C # разрешает «Foo» получать доступ к элементам «Base» только из экземпляра «Derived1». «Другой» может быть чем-то, что не является «Derived1» (это может быть, например, «Derived2»), и поэтому он не разрешает доступ к «m_x».
В этом случае вашего кода VB разрешил «боковой» доступ к конструктору «WebControl».
C #, однако, нет.