2012-02-29 7 views
6

Me pregunto si alguien conoce una extensión que aparece una advertencia si arrastra un archivo a otra carpeta a través del explorador de soluciones VS 2010. Muchas veces voy a estar en un archivo y mi computadora puede retrasarse un segundo y, de repente, el archivo está ahora en alguna otra carpeta y es posible que ni siquiera lo note.Arrastra la extensión de advertencia de archivo VS 2010?

+0

¿Puedes por favor seleccionar la respuesta de shamp00 es correcta y otorgarle la recompensa? De lo contrario, esta pregunta puede cerrarse antes y perderá el premio de recompensa. – Will

+0

Hmmm. Chobo2: no especificó "gratis" como parte de los criterios para la pregunta, pero ¿quizás colocó la recompensa y dijo "gratis" después de que se publicó la respuesta no gratuita? ... Ya sea que otorgue o no la recompensa, Publicaré una recompensa de 100 representantes para que alguien encuentre una extensión gratuita, en una nueva pregunta si cierra esta. – perfectionist

+0

No, publiqué la recompensa antes de dar cualquier respuesta posible (de ahí por qué nunca edité mi pregunta original). No tengo planes de cerrar esta pregunta, ya que realmente me gustaría encontrar esta extensión (que es gratis, no voy a pagar $ 50 por VSCommands para una función y por eso no he recompensado la recompensa de shamp00 ya que incluso una opción paga es solo una forma de obtener una característica que estoy pidiendo) – chobo2

Respuesta

7

Hay una extensión de Visual Studio disponible, llamado VSCommands 2010 que tiene una característica Prevenir Arrastre accidental & gota en el Explorador de soluciones.

enter image description here

Editar La característica es parte del paquete Pro, que no es libre.

+0

No es gratis. Las preguntas de compras apestan. –

+0

@Hans Estás en lo correcto: he actualizado mi respuesta. – shamp00

0

No conozco una extensión gratuita de Visual Studio que lo haga, pero aquí hay una muestra de C# de un Addin que demuestra cómo conectar con Visual Studio Global remove & renombra la gestión de archivos. Se basa en la interfaz IVsTrackProjectDocumentsEvents2.

Tendría que ampliar los dos métodos OnQueryxxx para satisfacer sus necesidades.

using System; 
using System.Diagnostics; 
using EnvDTE; 
using EnvDTE80; 
using Extensibility; 
using Microsoft.VisualStudio.Shell; 
using Microsoft.VisualStudio.Shell.Interop; 

namespace MyAddin1 
{ 
    public class Connect : IDTExtensibility2, IVsTrackProjectDocumentsEvents2 
    { 
     private uint _trackerCookie; 

     public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) 
     { 
      _applicationObject = (DTE2)application; 
      _addInInstance = (AddIn)addInInst; 

      // the Addin project needs assembly references to Microsoft.VisualStudio.Shell, Microsoft.VisualStudio.Shell.Interop && Microsoft.VisualStudio.OLE.Interop 
      // any version should do 
      ServiceProvider sp = new ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider)_applicationObject); 
      IVsTrackProjectDocuments2 tracker = (IVsTrackProjectDocuments2)sp.GetService(typeof(SVsTrackProjectDocuments)); 

      // ask VS to notify us of files & directories changes 
      tracker.AdviseTrackProjectDocumentsEvents(this, out _trackerCookie); 
     } 

     public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom) 
     { 
      if (_trackerCookie != 0) 
      { 
       // we quit, tell VS not to notify us anymore 
       ServiceProvider sp = new ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider)_applicationObject); 
       IVsTrackProjectDocuments2 tracker = (IVsTrackProjectDocuments2)sp.GetService(typeof(SVsTrackProjectDocuments)); 
       tracker.UnadviseTrackProjectDocumentsEvents(_trackerCookie); 
       _trackerCookie = 0; 
      } 
     } 

     public int OnQueryRenameFiles(IVsProject pProject, int cFiles, string[] rgszMkOldNames, string[] rgszMkNewNames, VSQUERYRENAMEFILEFLAGS[] rgFlags, VSQUERYRENAMEFILERESULTS[] pSummaryResult, VSQUERYRENAMEFILERESULTS[] rgResults) 
     { 
      Trace.WriteLine("OnQueryRenameFiles pProject:" + pProject + " old[0]:" + rgszMkOldNames[0] + " new[0]:" + rgszMkNewNames[0]); 

      // TODO: implement this (I have assumed cFiles is 1 here) 
      if (!NotRenameOk(old[0], new[0]) 
      { 
       rgResults[0] = VSQUERYRENAMEFILERESULTS.VSQUERYRENAMEFILERESULTS_RenameNotOK; // nope, it's not ok 
      } 
      return 0; 
     } 

     public int OnQueryRemoveFiles(IVsProject pProject, int cFiles, string[] rgpszMkDocuments, VSQUERYREMOVEFILEFLAGS[] rgFlags, VSQUERYREMOVEFILERESULTS[] pSummaryResult, VSQUERYREMOVEFILERESULTS[] rgResults) 
     { 
      Trace.WriteLine("OnQueryRemoveFiles pProject:" + pProject + " file[0]:" + rgpszMkDocuments[0]); 

      // TODO: needs to be implemented, use rgResults to tell VS if it's ok or not 
      return 0; 
     } 

     // other IVsTrackProjectDocumentsEvents2 methods implementation omitted for brevity... 
+0

no ... del todo ... claro cómo comenzar a usar este código. ¿Puede vincularme a cualquier proyecto de ejemplo/ejemplos/recursos aplicables para ver cómo codificar los complementos de vs2010? – perfectionist

+0

@perfectionist: puede usar Visual Studio para crear dicho complemento: simplemente elija Nuevo proyecto/Otros tipos de proyectos/Extensibilidad y complemento de Visual Studio, luego copie y pegue el código. Sin embargo, si no tiene un desarrollador a la mano, no podrá implementar el funcionamiento de OnQueryRename/Remove ... –

+0

De acuerdo, parece que esto podría ser factible: ciertamente me ha dado algo que hacer sobre el problema, por lo que por la presente se le otorga la recompensa. Huzzah. Volveré a publicar esta pregunta con resultados. – perfectionist

Cuestiones relacionadas