自定义工作项控件在Visual Studio 2015 TFS 2013中不起作用

Sha*_*gor 2 tfs visual-studio tfs2013 visual-studio-2015

我有一个简单的自定义工作项控件在VS 2013中完美运行.我最近在我的Windows 10机器上安装了VS 2015,控件抛出一个错误,如下所示:

TF400939:自定义控件类型"TimSheetsControl.WITimeSheetControl"未实现IWorkItemControl接口,或者是针对不同版本的Visual Studio编译的.

这很令人沮丧,因为控件确实实现了IWorkItemControl接口.编译到Visual Studio的版本似乎并不是一件事,至少据我所知.

我试图创建一个非常简单的控件(只是一个屏幕上的ComboBox)来做一些测试,我得到了完全相同的错误.

我想我有几个问题:

  1. 我应该再在Visual Studio中进行这种类型的自定义控件了吗?或者我应该创建Web控件来替换在Visual Studio中完成的操作.
  2. 是否有一些我正在做的非常错误导致这种失败?

我创建的非常简单的控制代码如下,如果该信息有用,我很乐意回答有关我的环境的问题.

感谢您的时间和关注.

UserControl代码落后(WITimeSheetControl):

namespace TimSheetsControl
{
    public partial class WITimeSheetControl : UserControl, IWorkItemControl
    {
        private object WorkItemDataSource;
        protected IServiceProvider ServiceProvider = null;
        public WITimeSheetControl()
        {
            InitializeComponent();
        }

        public StringDictionary Properties{get; set;}

        public bool ReadOnly { get; set; }

        public object WorkItemDatasource
        {
            get
            {
                return WorkItemDataSource;
            }

            set
            {
                WorkItemDataSource = value;
            }
        }

        public string WorkItemFieldName { get; set; }

        public event EventHandler AfterUpdateDatasource;
        public event EventHandler BeforeUpdateDatasource;

        public void Clear()
        {

        }

        public void FlushToDatasource()
        {
        }

        public void InvalidateDatasource()
        {
            if (string.IsNullOrEmpty(WorkItemFieldName))
            {
                throw new ArgumentNullException("The fieldname property for the WITimeSheetControl is not set.");
            }

            cmbPosition.SelectedIndex = -1;
        }

        public void SetSite(IServiceProvider serviceProvider)
        {
            ServiceProvider = serviceProvider;
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

UserControl Designer代码:

namespace TimSheetsControl
{
    partial class WITimeSheetControl
    {
        /// <summary> 
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary> 
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Component Designer generated code

        /// <summary> 
        /// Required method for Designer support - do not modify 
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.cmbPosition = new System.Windows.Forms.ComboBox();
            this.SuspendLayout();
            // 
            // cmbPosition
            // 
            this.cmbPosition.DropDownWidth = 145;
            this.cmbPosition.FormattingEnabled = true;
            this.cmbPosition.Items.AddRange(new object[] {
            "Business Analyst",
            "Programmer"});
            this.cmbPosition.Location = new System.Drawing.Point(139, 23);
            this.cmbPosition.MaximumSize = new System.Drawing.Size(165, 0);
            this.cmbPosition.Name = "cmbPosition";
            this.cmbPosition.Size = new System.Drawing.Size(151, 21);
            this.cmbPosition.TabIndex = 0;
            // 
            // WITimeSheetControl
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Controls.Add(this.cmbPosition);
            this.Name = "WITimeSheetControl";
            this.Size = new System.Drawing.Size(1219, 565);
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.ComboBox cmbPosition;
    }
}
Run Code Online (Sandbox Code Playgroud)

WICC:

<?xml version="1.0" encoding="utf-8" ?>
<CustomControl xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Assembly>TimSheetsControl.dll</Assembly>
    <FullClassName>TimSheetsControl.WITimeSheetControl</FullClassName>
</CustomControl>
Run Code Online (Sandbox Code Playgroud)

Gor*_*ing 6

您需要编译针对TFS 2015二进制文件的自定义控件版本,以便在VS 2015中加载控件.

  • 戈登,谢谢.对于遇到此问题的任何其他人,您需要获取安装Team Explorer 2015时安装的14版TFS dll.在我的机器上找到DLL:"C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer" (2认同)
  • 就我而言,我正在维护的项目是引用旧版Visual Studio工作项跟踪dll.将其更改为当前的(位于"C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer")解决了该问题. (2认同)