Как отладить проект с выходным типом библиотеки классов в Visual Studio? - PullRequest
2 голосов
/ 06 апреля 2011

Я столкнулся с проблемой, которую мне нужно отладить внутри метода проекта библиотеки классов? Но я получил сообщение об ошибке: «Проект с выходным типом библиотеки классов не может быть запущен напрямую»? Есть ли способ обойти это? Мой проект - пользовательский элемент управления.

 [XRDesigner("Rapattoni.ControlLibrary.CCMLThreePicGalleryTableDesigner," + "Rapattoni.ControlLibrary")]
    public class CCMLThreePicGalleryCtrl : XRTable
    {
        #region Variables
        const int cTableWidth = 825;
        #endregion

        #region Properties
        /// <summary>
        /// Get\Set  bindable variables
        /// </summary>

        [Bindable( true ), DesignerSerializationVisibility( DesignerSerializationVisibility.Hidden )]
        public string SerialPicUrlString
        {
            get
            {
                return String.Empty;
            }
            set
            {
                SetPictures( value );
            }
        }

        private int CellWidth
        {
            get;  
            set;
        }

        private int CellHeight
        {
            get;  
            set;
        }

        private int PicHeight
        {
            get;  
            set;
        }

        private int PicWidth  
        { 
            get; set; 
        }

        private int MaximumPictures
        {
            get; set;
        }
        #endregion Properties


        #region Events

        #endregion

        #region Public/Private Methods

        private void SetPictures( string urlString )
        {
            CellWidth = 275;
            CellHeight = 130;
            PicWidth = 175;
            PicHeight = 120;
            //CommentCellWidth = "150";
            MaximumPictures = 12;

            this.Rows.Clear();
            this.BeginInit();

            string[] urls = urlString.Split( ';' );

            XRPictureBox picBox;
            XRTableRow row;
            CCMLThreePicGalleryCell cell;  //, CommentCell;

            // Prepare first Row
            row = new XRTableRow();
            row.Height = CellHeight; 
            row.CanShrink = false;

            int picTotal = urls.Length;
            /*
            if (picTotal % 3 == 1)  // Don't have one picture in a row
                picTotal--;
             */
            if (picTotal > MaximumPictures)      // Max of 12 pictures shown
                picTotal = MaximumPictures;
            else if (picTotal == 1)
                picTotal = 0;

            // Keep track of which picture
            int picCount = 0;
            // Go through each picture and assign to a cell
            for (int i = 0; i < picTotal; i++)
            {
                if (urls[i] != "")
                {

                    if (picCount % 3 == 0 && picCount > 0 )   // Make a new row after every 3rd picture
                    {
                        // Create a new row for pictures
                        row = new XRTableRow();
                        row.Height = CellHeight;
                        row.CanShrink = false;
                    }


                    cell = new CCMLThreePicGalleryCell();
                    cell.Size = new Size(CellWidth, CellHeight);
                    cell.CanShrink = false;
                    cell.Padding = new PaddingInfo(0, 0, 5, 5);


                    //CommentCell = new ThreePicGalleryCell(); // Don't want Comments

                    string[] url_comment = urls[i].Split('|');
                    picBox = new XRPictureBox();
                    //picBox.HtmlItemCreated += new HtmlEventHandler(picBox_HtmlItemCreated);
                    picBox.Sizing = ImageSizeMode.ZoomImage;
                    url_comment[0] = url_comment[0].Trim();
                    picBox.ImageUrl = url_comment[0];
                    picBox.Size = new Size(PicWidth, PicHeight);

                    cell.Controls.Add(picBox);

                    row.Cells.Add(cell);

                    if (picCount % 3 == 0)   // Add Finalized row
                    {
                        this.Rows.Add(row); // Add current row

                    }
                picCount++;
                } 
            }
            // Fix for odd bug where final picture is out 
            // of alignment if it is 2nd in the last row 
            if (picCount % 3 == 2)
            {
                cell = new CCMLThreePicGalleryCell();
                cell.Size = new Size(CellWidth, CellHeight);
                row.Cells.Add(cell);
                this.Rows.Add(row);
            }
            else if (picCount % 3 == 1)  // When last row has 1 picture
            {
                this.Rows.Remove(row);
            }


            if (urlString.Equals(string.Empty))
                this.Rows.Clear();

            this.EndInit();

        }

        #endregion
    }

Ответы [ 4 ]

4 голосов
/ 06 апреля 2011

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

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

3 голосов
/ 06 апреля 2011

Настройка второго небольшого проекта для использования библиотеки.

1 голос
/ 06 апреля 2011

Присоедините отладчик Visual Studio к процессу, в котором выполняется двоичный файл.

0 голосов
/ 07 апреля 2011

Я согласен с Джоном Скитом.TDD (разработка через тестирование) - лучший путь для классов, ориентированных на обслуживание или бизнес-логику.

Позволяет запускать небольшую часть графического интерфейса и тестировать его без загрузки всего приложения.

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