c # Visual Studio … agregando referencias programáticamente

¿Hay alguna forma de que se pueda agregar una referencia a una solución mediante progtwigción?

Tengo un botón de complemento, cuando el usuario lo presiona, quiero que se agregue una referencia. es posible?

Algo como esto no lo he probado

obtener el medio ambiente

EnvDTE80.DTE2 pEnv = null; Type myType = Type.GetTypeFromProgID("VisualStudio.DTE.8.0"); pEnv = (EnvDTE80.DTE2)Activator.CreateInstance(myType, true); 

obtener la solución.

 Solution2 pSolution = (Solution2)pEnv.VS.Solution; 

consigue el proyecto que quieras

 Project pProject = pSolution.Projects[0]; 

agregar la referencia

 pProject.References.Add(string referenceFilePath); 

Hay un ejemplo en CodeProject .

La funcionalidad está contenida en una sola clase elRefManager y el método para llamar es CheckReferences . El código se puede ver aquí seleccionando el archivo elRefManager.cs en el lado izquierdo.

Como se ve en el artículo, podrías hacer …

 private void button1_Click(object sender, System.EventArgs e) { int ec; ec=elRefManager.CheckReferences(null, new string[] {textBox1.Text}); if (ec<0) MessageBox.Show("An error occurred adding this reference"); if (ec>0) MessageBox.Show("Could not add " + textBox1.Text + "\nCheck its spelling and try again"); } 

System.Assembly.load Le permite llamar a funciones en una biblioteca que no fueron creadas con su progtwig.


Si desea agregar una referencia al proyecto para que esté en la solución, puede usar lo siguiente. Básicamente lo mismo que @Scots responder.

Lo hice en un macro que es vb, pero estoy seguro de que puedes tener la idea

  DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate() Dim objProject As EnvDTE.Project Dim i As Long i = DTE.Solution.Projects.Count For Each objProject In DTE.Solution.Projects If (objProject.Name() = "csCA") Then Dim vsproj As VSLangProj.VSProject vsproj = objProject.Object vsproj.References.Add("C:\Users\test.dll") End If Next