有没有任何方式可以通过编程方式向解决方案中添加引用?
我有一个插件按钮,当用户按下它时,我想要添加一个引用。
原因是,我创建了一款软件,希望将其集成到任何给定的VS程序中(如果开发人员想要),他们只需单击插件按钮,引用就会被加载到当前解决方案中。
这个可能吗?
有没有任何方式可以通过编程方式向解决方案中添加引用?
我有一个插件按钮,当用户按下它时,我想要添加一个引用。
原因是,我创建了一款软件,希望将其集成到任何给定的VS程序中(如果开发人员想要),他们只需单击插件按钮,引用就会被加载到当前解决方案中。
这个可能吗?
像这样的我还没有测试过
获取环境
EnvDTE80.DTE2 pEnv = null;
Type myType = Type.GetTypeFromProgID("VisualStudio.DTE.8.0");
pEnv = (EnvDTE80.DTE2)Activator.CreateInstance(myType, true);
获取解决方案。
Solution2 pSolution = (Solution2)pEnv.VS.Solution;
Project pProject = pSolution.Projects[0];
添加引用
pProject.References.Add(string referenceFilePath);
在CodeProject上有一个例子。
该功能包含在单个类elRefManager
中,要调用的方法是CheckReferences
。可以通过在左侧选择elRefManager.cs文件这里查看代码。
正如文章中所示,您可以...
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
允许您调用未与您的程序一起构建的库中的函数。
我在宏中完成了这个操作,它是vb语言,但我相信您可以理解这个思路。
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