问题原因已验证
首先,我想指出,确实,在引用的 dll 中丢失命名空间的问题是因为该 dll 中存在自定义 UI 编辑器/设计器。
修复
从“主要”类库中分离自定义编辑器/设计器的一般过程是这样的:
1.)找到项目中的所有自定义编辑器/设计器。如果您只是对该项目有点熟悉,那么一个好的方法是在整个解决方案中查找(Ctrl + F) 'UITypeEditor'。如果你是设计它的人,那么你应该没有问题。
2.)删除或注释掉整个自定义编辑器/设计器类。我更喜欢注释掉以方便文档(以防万一您需要返回)。
3.)在解决方案中创建新项目。如果您看不到解决方案(即您只能看到项目),请转到工具-->选项-->项目和解决方案。在那里,您将看到一个显示“始终显示解决方案”的复选框。显示解决方案后,右键单击并选择 add-->New Project... 可以任意命名,这对代码几乎没有影响。
4.)在新项目中将 Class1 重命名为方便的名称。在最初保存自定义编辑器/设计器类的文件顶部传输所有“使用”语句。 编辑:为允许您从主项目访问所需类型的任何命名空间添加 using 语句。为每个类声明适当的命名空间。将自定义类复制并粘贴到正确的命名空间中(如果需要,您可以将所有自定义编辑器/设计器放在这个文件中)。将任何声明为“内部”的类更改为“公共”(内部只是程序集的范围)。
5.)如果新项目需要任何引用,请立即添加。如果您的自定义编辑器正在编辑自定义类型,您可能需要对定义这些类型的项目的引用。如果这些类型是在您的“主要”程序集中定义的,这可能会有点棘手,因为它可能会导致循环引用问题。解决此问题的一种方法(可能也是正确的方法)是从主程序集中删除这些类型的声明,并仅为它们的声明创建一个新项目/程序集。如果由于某种原因它们与您的主程序集密不可分,请搁置先前由您的主程序集制作的成功构建 (dll) 并引用它。这会降低代码的未来可持续性,因为这些类型可能会发生,但如果这是您想要的,现在就可以完成工作。
6.)在调试自定义编辑器/设计器项目后,构建它并将该项目的构建 (dll) 作为参考添加到主项目/程序集中。
7.)内部调试,在解决方案中创建一个新项目并将两个dll(主编辑器和自定义编辑器)添加到引用中。验证控件/属性在设计时和运行时的行为是否符合预期。
8.)最后,在外部 调试。创建新的解决方案,引用两个 dll,验证功能。在本机解决方案和外部进行调试似乎有点矫枉过正,但我发现环境之间的行为存在许多差异。要彻底。
重要提示: 我花了很长时间才确定需要添加两个 dll。您会看到,当仅将主 dll 添加到测试项目时,它的行为就像同时添加了两者一样。我虽然这是合理的(而且相当花哨),因为主程序集引用了另一个程序集。但是,关闭并打开 Visual Studio,它不起作用。长话短说添加两个 dll。
TreeViewAdv 细节
1.)有两个自定义 UIEditor。第一个是在 NodeControlsCollection.cs 中称为 NodeControlCollectionEditor,它继承了标准的 .NET CollectionEditor。添加的唯一功能是明确分配允许编辑器使用的控件类型。似乎这在很大程度上是作为一种解决方法来允许将所有 NodeControl 类型添加到集合中(这需要传递类型 NodeControl),但是绕过传递 NodeControl 类型会导致错误的事实,因为您无法实例化抽象类型. 第二个是StringCollectionEditor.cs 中的StringCollectionEditor。这也继承了标准的 .NET CollectionEditor 并添加了一些功能(不确定目的)。
2 - 4.)与一般过程相同。
5.) 我目前不得不使用后一种方法(留出 Aga.Controls 的 dll 供我的自定义 UIEditor 参考)。稍后我希望将一些对象声明与主程序集分开,以使解决方案更可靠。
6 - 8.) 在同一个解决方案(即使是不同的项目)中运行测试应用程序时,不会发生原始错误(丢失 aga 命名空间)。此外,一些在外部工作的修复程序在内部没有正确运行,反之亦然。因此,我建议在这两种环境中进行测试。
最终请求
虽然我的问题的一般性和细节性都在这里得到了解答,但 Plutonix 的帮助对于我找到解决方案至关重要。虽然我将此标记为答案。我想如果人们也支持 Plutonix 的答案,因为他为帮助我找到答案所付出的努力(此外,如果他的答案不太具体,他的答案也是正确的)。
编辑:当我修改原始 TVA C# 代码时,上述过程有效。我什至能够在 VB.net 项目中引用并成功使用生成的 DLL。当我尝试将相同的过程应用于已转换为 VB.net 的 TVA 代码行时,它导致了与我开始时相同的问题。一切正常,直到我去运行应用程序,然后它看不到 aga 命名空间。
编辑解决方案: 转到属性(项目丢失参考)--> 编译选项卡--> 高级编译选项按钮。在目标框架下,如果还没有,请更改为“.NET Framework 4”。如果已选择该值,则您可能正在寻找不同的原因。