如何在设计时解决assembly?

我有一个可扩展性库(或一个开头),带有UITypeEditor。 我现在想用EditorAttribute来装饰属性。 我不想引用扩展性库,因为它不需要部署,所以我使用这个:

[Editor("MyProject.Extensibility.MyUIEditor, MyProject.Extensibility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", typeof (UITypeEditor))] MySpecialType SpecialType { get; set; } 

这不起作用。 类型编辑器用于枚举,当我使用它时,会显示标准枚举下拉列表。 但是,如果将类型编辑器复制到项目中并使用直接类型引用,则一切正常。 我已经尝试使用Activator.CreateInstance测试我的字符串,我已经有了它的工作。 MyProject.Extensibility.dll被复制到几乎每个地方(所有项目的bin / debug文件夹)。 是否有一些特殊的地方可以放置可扩展性的DLL .net可以解决程序集?

谢谢!

只需输入Regedit.exe并创建一个密钥,如下所示:

 HKLM \ SOFTWARE \微软\ .NETFramework \ V2.0.50727 \ AssemblyFoldersEx \的StackOverflow

密钥的名称并不重要,在VisualFoldersEx中列出的所有文件夹名称都由Visual Studio搜索Assemblies设计时。

必须使用具有文件夹路径作为值的(默认)条目在Regedit中添加文件夹。 (例如,参见兄弟键)。

有趣的是,当您在.NET选项卡上的项目上下文菜单上单击“添加新引用”时,AssemblyFoldersEx注册表项中存在的所有文件夹也将自动出现。

另一种方法是将所需的程序集添加到Global Access Cache(c:\ Windows \ Assembly)

我刚做了以下测试:在资源程序集中,我输入以下代码:

 public class MyEditor : UITypeEditor { public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context) { return UITypeEditorEditStyle.Modal; } public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value) { MessageBox.Show("Works"); return null; } } 

在使用者程序集(Windows窗体可执行程序集)上,我创建了一个派生自Button的组件,如下所示:

 public class MyButton : Button { [Editor("AssemblyReferenceCL.MyEditor, AssemblyReferenceCL", typeof(UITypeEditor))] public String MyProp { get; set; } } 

两个组件之间没有参考。 一切都很好。