2013-09-12 2 views
0

Я добавляю пользовательский редактор для нашего настраиваемого параметра процесса, но добавляю сборку в «путь управления версиями к пользовательским сборкам», и когда я редактирую определение сборки, редактор не показывает, почему?tfs build 2010 добавить пользовательский редактор

, когда я добавить сборку в Visual Studio зондирующего путь это работает

, но я не хочу, чтобы скопировать menualy сборку всех cllints, которые используют эту сборку и поэтому я хочу, чтобы использовать сборку из источника контроль, но тогда это не работает

мне нужно я sulotion

мой редактор кода:

using System; 
using System.ComponentModel; 
using System.Drawing.Design; 
using System.IO; 
using System.Management; 
using System.Windows.Forms; 


namespace SVBuild 
{ 

public class FolderBrowserEditor : UITypeEditor 
{ 
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) 
    { 
     if (context != null) 
      return UITypeEditorEditStyle.Modal; 

     return UITypeEditorEditStyle.None; 
    } 

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) 
    { 
     FolderBrowserDialog fd; 
     string path = ""; 
     string realPath = ""; 

     if (context == null || provider == null || context.Instance == null) 
      return base.EditValue(provider, value); 
     fd = new FolderBrowserDialog(); 
     fd.ShowNewFolderButton = true; 
     fd.Description = "Select Folder"; 
     fd.RootFolder = Environment.SpecialFolder.MyComputer; 
     if (fd.ShowDialog() == DialogResult.OK) 
     { 
      path = fd.SelectedPath; 
      realPath = ResolveToUNC(path); 
     } 
     return realPath; 
    } 
    #region ResolveToUNC 
    /// <summary>Resolves the given path to a full UNC path, or full local drive path.</summary> 
    /// <param name="pPath"></param> 
    /// <returns></returns> 
    private string ResolveToUNC(string pPath) 
    { 
     if (pPath.StartsWith(@"\\")) { return pPath; } 

     string root = ResolveToRootUNC(pPath); 

     if (pPath.StartsWith(root)) 
     { 
      return pPath; // Local drive, no resolving occurred 
     } 
     else 
     { 
      return pPath.Replace(GetDriveLetter(pPath), root); 
     } 
    } 
    /// <summary>Resolves the given path to a root UNC path, or root local drive path.</summary> 
    /// <param name="pPath"></param> 
    /// <returns>\\server\share OR C:\</returns> 
    private string ResolveToRootUNC(string pPath) 
    { 
     ManagementObject mo = new ManagementObject(); 

     if (pPath.StartsWith(@"\\")) { return Directory.GetDirectoryRoot(pPath); } 

     // Get just the drive letter for WMI call 
     string driveletter = GetDriveLetter(pPath); 

     mo.Path = new ManagementPath(string.Format("Win32_LogicalDisk='{0}'", driveletter)); 

     // Get the data we need 
     uint DriveType = Convert.ToUInt32(mo["DriveType"]); 
     string NetworkRoot = Convert.ToString(mo["ProviderName"]); 
     mo = null; 

     // Return the root UNC path if network drive, otherwise return the root path to the local drive 
     if (DriveType == 4) 
     { 
      return NetworkRoot; 
     } 
     else 
     { 
      return driveletter + Path.DirectorySeparatorChar; 
     } 
    } 

    /// <summary>Checks if the given path is on a network drive.</summary> 
    /// <param name="pPath"></param> 
    /// <returns></returns> 
    private bool isNetworkDrive(string pPath) 
    { 
     ManagementObject mo = new ManagementObject(); 

     if (pPath.StartsWith(@"\\")) { return true; } 

     // Get just the drive letter for WMI call 
     string driveletter = GetDriveLetter(pPath); 

     mo.Path = new ManagementPath(string.Format("Win32_LogicalDisk='{0}'", driveletter)); 

     // Get the data we need 
     uint DriveType = Convert.ToUInt32(mo["DriveType"]); 
     mo = null; 

     return DriveType == 4; 
    } 

    /// <summary>Given a path will extract just the drive letter with volume separator.</summary> 
    /// <param name="pPath"></param> 
    /// <returns>C:</returns> 
    private string GetDriveLetter(string pPath) 
    { 
     if (pPath.StartsWith(@"\\")) { throw new ArgumentException("A UNC path was passed to GetDriveLetter"); } 
     return Directory.GetDirectoryRoot(pPath).Replace(Path.DirectorySeparatorChar.ToString(), ""); 
    } 
    #endregion 
} 

}

ответ

0

Несколько вещей могут решить проблему.

  1. Проверка отображения для пользовательской сборки
  2. После того, как проверили свой материал в в TFS, необходимо перезапустить VS для того, чтобы работать, содержимое пользовательской сборки загружаются в временную папку, когда вы откроете вкладку процесса для первого время
  3. Любые сборки в частных собраниях GAC или VS, как правило, победят над загруженными.
  4. Убедитесь, что ваши метаданные параметров сборки имеют собственные пространства имен и т. Д.
  5. Если редактор включен в сборку ссылок, вы должны включить по крайней мере одно действие для этой сборки, которое должно быть правильно загружено рабочим процессом (не уверен, что это повлияет на редактор процесса в VS, но вызовет проблемы в сборке).

Вы можете использовать другой экземпляр VS для отладки того, у кого есть проблемы. В разделе «Модуль» будет указано, какие вещи загружены и откуда, как только вы можете начать разбирать причину.

Обновите свой вопрос, если это не решит проблему.

+0

Я выполнил все эти действия для выборочной сборки и перезагрузки. VS i ther не является сборкой в ​​частной сборке GAC ИЛИ. Метаданные параметров сборки в порядке, а для этой сборки и для этого сборка нет. просто когда я копирую сборку на частную сборку, которую она показывает, но я хочу, чтобы она отображалась для всего клиента – user2774307

Смежные вопросы