Могу ли я выполнять итерации ссылочных сборок во время разработки в C #? - PullRequest
2 голосов
/ 11 января 2009

Я пытаюсь написать компонент .NET. Компонент будет перенесен в форму / пользовательский элемент управления и должен получить доступ к атрибутам в сборках, на которые ссылается родительская форма / пользовательский элемент управления во время разработки. Можно ли получить эти сборки во время проектирования?

Ответы [ 3 ]

1 голос
/ 11 января 2009

Visual Studio Automation and Extensibility позволит вам получить доступ к такого рода информации во время разработки, в том смысле, что вы можете иметь и надстройку доступа к данным во время разработки.

0 голосов
/ 14 января 2009

Это доказательство концепции, которую я наконец придумал для этого вопроса. Это не без недостатков, но я верю, что после небольшой работы он будет работать правильно.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Reflection;
using System.Windows.Forms;

namespace ReferencedAssemblies
{
    public partial class GetReferencedComponents : Component, ISupportInitialize
    {
        private Control hostingControl;

        public GetReferencedComponents(IContainer container) : this()
        {
            container.Add(this);
        }

        public GetReferencedComponents()
        {
            InitializeComponent();
            Assemblies = new List<string>();
            GetAssemblies();
        }

        public List<string> Assemblies { get; private set;  }

        [Browsable(false)]
        public Control HostingControl
        {
            get
            {
                if (hostingControl == null && this.DesignMode)
                {
                    IDesignerHost designer = this.GetService(typeof(IDesignerHost)) as IDesignerHost;
                    if (designer != null)
                        hostingControl = designer.RootComponent as Control;
                }
                return hostingControl;
            }
            set
            {
                if (!this.DesignMode && hostingControl != null && hostingControl != value)
                    throw new InvalidOperationException("Cannot set at runtime.");
                else
                    hostingControl = value;
            }
        }

        public void BeginInit()
        {
        }

        public void EndInit()
        {
            // use ISupportInitialize.EndInit() to trigger loading assemblies at design-time.
            GetAssemblies();
        }

        private void GetAssemblies()
        {
            if (HostingControl != null)
            {
                if (this.DesignMode)
                    MessageBox.Show(String.Format("Getting Referenced Assemblies from {0}", HostingControl.Name));
                Assemblies.Clear();
                AssemblyName[] assemblyNames = HostingControl.GetType().Assembly.GetReferencedAssemblies();
                foreach (AssemblyName item in assemblyNames)
                    Assemblies.Add(item.Name);
            }
        }
    }

}

Спасибо за ваши ответы!

Mike

0 голосов
/ 11 января 2009

Вы пытались использовать Assembly.GetReferencedAssemblies ?

EDIT:

Я удалил это сообщение, потому что у вас не было других ответов. Когда я первоначально ответил, я не прочитал вопрос должным образом, поэтому не видел часть «во время разработки». С другой стороны, может быть, это не имеет значения - это, по крайней мере, дает вам кое-что попробовать.

Удачи и извинения за погоню за диким гусем.

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