首页 > 解决方案 > 将控件重定位到自定义命名空间时如何修复设计器代码

问题描述

我有一个带有自定义控件的项目,该控件覆盖了system.windows.forms命名空间中的默认控件。这工作正常,但我发现我需要修改这个项目所依赖的 DLL,并使用一些需要知道这个自定义类的存在的代码;此代码使用控件的类名来执行各种操作。

由于项目依赖于DLL,循环依赖不是一个好主意,我将自定义类移动到第三个DLL,这是一个通过剪切和粘贴的新项目,并将项目和库设置为依赖这个新库,并将这个新库设置为首先构建,在其他两个项目之前,并添加了一个程序集引用。

到目前为止,一切都很好; 我现在可以导入这个新的命名空间并在我的代码中使用它。但是,现在自定义控件的现有使用在任何基于“设计器”的代码中都被破坏了,因为它们仍然指向默认命名空间。我尝试在 Project Properties > Imported namespaces 下添加引用,但这还不够:代码可能需要包含显式 line imports <myNamespace>。虽然这对于常规文件来说没有问题,但当您拥有设计器文件时,重要的是不要手动修改它。

通知 Visual Studio 任何名为 say 的自定义控件X现在应该被访问的最简单的正确方法是myNamespace.X什么?

标签: vb.netvisual-studio

解决方案


问题中完成的过程是正确的,但有一个警告:检查 .NET 版本,如果不同,请将目标版本设置为最低公分母。如果您使用比用于制作解决方案的原始 Visual Studio 更新的 Visual Studio,则很可能还有更新的 .NET。默认情况下,最新的 .NET 将用于新项目。Visual Studio 也会很高兴地尝试使用不同的 .NET 版本构建项目,并抱怨它找不到引用,然后偷偷地将版本不匹配隐藏为“警告”,即使默认情况下将程序集与不同目标链接是不可能的。

设计者会很高兴地接受自定义类,即使它是在另一个项目中定义的。


推荐阅读