如何在将控件重新定位到自定义命名空间时修复设计器代码



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

由于项目依赖于 DLL,并且循环依赖项不是一个好主意,因此我通过剪切和粘贴将自定义类移动到第三个 DLL,这是一个新项目,并将项目和库设置为依赖于这个新库,并将这个新库设置为首先生成,然后再生成其他两个项目,并添加程序集引用。

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

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

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

然后,设计人员将愉快地接受自定义类,即使它是在另一个项目中定义的。

最新更新