C# Visual Studio...以编程方式添加引用

17

有没有任何方式可以通过编程方式向解决方案中添加引用?

我有一个插件按钮,当用户按下它时,我想要添加一个引用。

原因是,我创建了一款软件,希望将其集成到任何给定的VS程序中(如果开发人员想要),他们只需单击插件按钮,引用就会被加载到当前解决方案中。

这个可能吗?

3个回答

7

像这样的我还没有测试过

获取环境

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);

3

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");
}

这与Darren所询问的直接相关。他正在询问如何从“插件”程序中以编程方式添加对项目的引用,这意味着他可以访问DEV实例/解决方案/项目系统。他不是在询问如何在运行时动态加载程序集。 - casperOne
我建议您指出在文章中哪里可以查看代码,以便Darren能够了解如何将其集成到他的插件中(这是一个外部程序,它访问运行对象表,然后与插件相同的接口进行交互)。 - casperOne

1

System.Assembly.load 允许您调用未与您的程序一起构建的库中的函数。


如果您想将项目添加到解决方案中以便引用,可以使用以下方法。基本上与@Scots的答案相同。

我在宏中完成了这个操作,它是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

3
这将不会向解决方案添加引用,它只是为正在运行的代码加载一个“Assembly”。 - Daniel DiPaolo
1
@jgauffin:添加引用和加载程序集是两个完全不同的事情。Darren正在询问如何添加引用,而不是加载程序集。 - casperOne
@rerun:是的,如果你正在使用命令行编译器,那么就是这样。如果你正在使用项目系统/MSBUILD,那么你也必须更新项目文件。无论哪种方式,它都不涉及System.Assembly.Load。 - casperOne
1
@casperOne - 如果它能完成同样的工作并解决手头的问题,那么争论语义的意义何在? - mellamokb
@mellamokb:请查看问题本身的第三条评论,Darren指出这正是他想要的(在VS中加载插件并单击按钮时添加对项目的引用)。 - casperOne
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接