c # Visual Studio ... добавление ссылок программно - PullRequest
16 голосов
/ 10 декабря 2010

Есть ли в любом случае, что ссылка может быть добавлена ​​в решение программно?

У меня есть кнопка добавления, когда пользователь нажимает ее, я хочу, чтобы ссылка была добавлена.Это возможно?

Ответы [ 3 ]

7 голосов
/ 10 декабря 2010

Что-то вроде этого я не проверял

получить среду

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;

получить проект, который вам нужен1009 *

Project pProject = pSolution.Projects[0];

добавить ссылку

pProject.References.Add(string referenceFilePath);
2 голосов
/ 10 декабря 2010

Есть пример на 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");
}
2 голосов
/ 10 декабря 2010

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
...