2009-10-27 20 views
4

我有一个可扩展性库(或一个开始),与一个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可以解析程序集?

谢谢!

回答

4

只需输入regedit.exe,然后创建一个密钥就像:

 
HKLM\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx\StackOverflow 

它并不真正的问题关键的名称,内AssemblyFoldersEx列出的所有文件夹名称的搜索对组件的设计时由Visual Studio。

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

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

另一种方法是将所需组件添加到全局访问缓存(C:\ WINDOWS \大会)

我只是做了如下测试:在资源组装我把下面的代码:

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窗体可执行程序集),我创建了一个由按钮派生就像这样一个组件:

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

有没有参考在两个组件之间。一切正常。

+0

谢谢! MessageBox.Show在我的尝试中不起作用,一直得到一个空引用异常。但是,我确实得到了一个模式编辑器,在另一个项目中,没有使用注册表设置的引用。再次感谢! – 2009-10-28 23:52:17