Пользовательское поле со списком удалено из панели инструментов, когда целью является x64, отлично работает с любым процессором

Windows 10 1803 x64, сборка 17134.165, Visual Studio 2017 15.7.5 c #

У меня есть настраиваемое поле со списком в форме. Если я создам решение, ориентированное на любой ЦП, проблем не возникает, но если я изменю целевое значение на x64, я получаю эту ошибку в конструкторе, и поле со списком удаляется из панели инструментов. Код в файле designer.cs не поврежден, и программа по-прежнему работает нормально.

Could not find type 'TestCustomComboBox.ComboBoxCustom'.  Please make sure that the assembly that contains this type is referenced.  If this type is a part of your development project, make sure that the project has been successfully built using settings for your current platform or Any CPU.

Если я вернусь к любому процессору, ошибка исчезнет, ​​и поле со списком вернется в панель инструментов. Мой компьютер x64.

Полная программа испытаний:

using System.Drawing;
using System.Windows.Forms;

namespace TestCustomComboBox
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
    /// <summary>
    /// Custom combobox with colour coding
    /// </summary>
    public class ComboBoxCustom : ComboBox
    {
        public ComboBoxCustom()
        {
            this.DrawMode = DrawMode.OwnerDrawFixed;
        }
        protected override void OnDrawItem(DrawItemEventArgs e)
        {
            base.OnDrawItem(e);
            e.DrawBackground();
            var item = (ComboBoxItem)Items[e.Index];
            Brush brush = new SolidBrush(item.ForeColor);
            if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
            { brush = Brushes.Yellow; }
            e.Graphics.DrawString(item.Text, this.Font, brush, e.Bounds.X, e.Bounds.Y);
        }
    }

    public class ComboBoxItem
    {
        public ComboBoxItem() { }

        public ComboBoxItem(string pText, object pValue)
        {
            text = pText; val = pValue;
        }

        public ComboBoxItem(string pText, object pValue, Color pColor)
        {
            text = pText; val = pValue; foreColor = pColor;
        }

        string text = "";
        public string Text
        {
            get { return text; }
            set { text = value; }
        }

        object val;
        public object Value
        {
            get { return val; }
            set { val = value; }
        }

        Color foreColor = Color.Black;
        public Color ForeColor
        {
            get { return foreColor; }
            set { foreColor = value; }
        }

        public override string ToString()
        {
            return text;
        }
    }

    public class ComboObject
    {
        public string DisplayMembers;
        public int ValueMembers;
        public int argb;
        public ComboObject(string theDisplayMembers, int theValueMembers, int theArgb)
        {
            DisplayMembers = theDisplayMembers;
            ValueMembers = theValueMembers;
            argb = theArgb;
        }
        public override string ToString()
        {
            return DisplayMembers;
        }
    }
}

person Gerry    schedule 18.07.2018    source источник
comment
AFAIK Visual Studio и / или VS Designer работает как 32-битный процесс, поэтому, когда вы скомпилируете свой элемент управления только для 64-битной версии, дизайнер не сможет его загрузить. Итак, IIRC вам придется скомпилировать свой элемент управления для AnyCPU или x86, по крайней мере, до тех пор, пока вы собираетесь использовать конструктор во время разработки ... (Возможно, взгляните на следующий связанный / аналогичный вопрос: stackoverflow.com/questions/5378919 /)   -  person bassfader    schedule 18.07.2018
comment
Спасибо, теперь это имеет смысл. Однако у меня есть проблема с уловкой 22. Я вызываю сборку, которая будет работать только при компиляции x64. Он работает, но с предупреждениями. Я предполагаю, что он разработан для любого процессора и скомпилирован для развертывания x64. Кстати, как бы вы отметили комментарий как лучший ответ?   -  person Gerry    schedule 18.07.2018