Способ решения этой конкретной проблемы для наших собственных элементов управления и способ, которым это делают несколько сторонних поставщиков элементов управления, состоит в том, чтобы оставить пространство имен нетронутым, а просто изменить имя DLL (т.е. MyControl.v11.1.DLL).
Затем, когда пришло время обновить элемент управления, вы редактируете файл проекта, изменяете имя DLL, и вы запускаетесь.
Мы используем несколько приемов, чтобысделайте это как можно более плавным, когда имеете дело как с нашими элементами управления, так и с элементами управления третьих лиц.
Во-первых, мы всегда копируем версию DLL в каталог, относящийся к проекту.Таким образом, если разработчик обновит свой компьютер до более поздней версии, он не будет случайно встроен в приложение.
Во-вторых, мы всегда гарантируем, что ссылки на DLL в проекте и файлы licenses.licx имеютинформация о версии и открытом ключе удалена.
Наконец, мы вручную редактируем файл проекта, чтобы убедиться, что для проекта не требуется конкретная версия и что он ссылается на локальную копию сборки.
Здесьпример записи из нашего файла проекта со всеми вышеупомянутыми приложениями:
<Reference Include="Controls.v11.1">
<HintPath>..\..\Assemblies\Controls.v11.1.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
Мы успешно использовали этот подход для наших проектов, по крайней мере, 8 лет, и с тех пор, как мы внедрили этот подход, у нас нет 'Не было проблем с обновлением DLL.