Как сборка решается во время разработки? - PullRequest
4 голосов
/ 27 октября 2009

У меня есть библиотека расширяемости (или ее начало) с 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 мог разрешить сборку?

Спасибо!

1 Ответ

4 голосов
/ 27 октября 2009

Просто введите Regedit.exe и создайте ключ, например:

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

Неважно, как называется ключ, все имена папок, перечисленные в AssemblyFoldersEx, ищутся во время разработки сборок Visual Studio.

Папка должна быть добавлена ​​в Regedit с использованием записи (по умолчанию), в которой в качестве значения указан путь к папке. (См., Например, ключи братьев и сестер).

Интересно, что все папки, присутствующие в разделе реестра AssemblyFoldersEx, будут автоматически появляться и при нажатии «Добавить новую ссылку» в контекстном меню проекта на вкладке .NET.

Другой подход - добавить нужную сборку в глобальный кэш доступа (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; }
}

Нет ссылки между двумя сборками. Все работало просто отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...