vb.net - 将控件重定位到自定义命名空间时如何修复设计器代码
问题描述
我有一个带有自定义控件的项目,该控件覆盖了system.windows.forms
命名空间中的默认控件。这工作正常,但我发现我需要修改这个项目所依赖的 DLL,并使用一些需要知道这个自定义类的存在的代码;此代码使用控件的类名来执行各种操作。
由于项目依赖于DLL,循环依赖不是一个好主意,我将自定义类移动到第三个DLL,这是一个通过剪切和粘贴的新项目,并将项目和库设置为依赖这个新库,并将这个新库设置为首先构建,在其他两个项目之前,并添加了一个程序集引用。
到目前为止,一切都很好; 我现在可以导入这个新的命名空间并在我的代码中使用它。但是,现在自定义控件的现有使用在任何基于“设计器”的代码中都被破坏了,因为它们仍然指向默认命名空间。我尝试在 Project Properties > Imported namespaces 下添加引用,但这还不够:代码可能需要包含显式 line imports <myNamespace>
。虽然这对于常规文件来说没有问题,但当您拥有设计器文件时,重要的是不要手动修改它。
通知 Visual Studio 任何名为 say 的自定义控件X
现在应该被访问的最简单的正确方法是myNamespace.X
什么?
解决方案
问题中完成的过程是正确的,但有一个警告:检查 .NET 版本,如果不同,请将目标版本设置为最低公分母。如果您使用比用于制作解决方案的原始 Visual Studio 更新的 Visual Studio,则很可能还有更新的 .NET。默认情况下,最新的 .NET 将用于新项目。Visual Studio 也会很高兴地尝试使用不同的 .NET 版本构建项目,并抱怨它找不到引用,然后偷偷地将版本不匹配隐藏为“警告”,即使默认情况下将程序集与不同目标链接是不可能的。
设计者会很高兴地接受自定义类,即使它是在另一个项目中定义的。
推荐阅读
- c# - 如何保护在 Linux 上运行的 ASP.NET Core Web 应用程序的 PFX 证书?
- python - 如何在 Python 3.X 中获取已创建对象(而不是类本身)的名称
- android - Xamarin - 由于未优化的 APK 警告,无法发布到 Google 商店
- python - 在另一列上使用拆分有条件地填充新列
- angular - 如何设置表单控件值如果表单控件值在反应式表单方法中的 ngFor 循环内,
- amazon-web-services - 返回码:1 输出:Dockerfile 和 Dockerrun.aws.json 都丢失,中止部署
- linux - 如何为具有多个目录的项目创建 build.xml?
- numpy - 我不明白 numpy 中的这种切片或重塑
- encryption - 如何使用命令行工具解密 rijndael
- apache-kafka - 向kafka发送数据失败