С# Visual Studio... добавление ссылок программно

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

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

Ответы

Ответ 1

Что-то вроде этого я его не тестировал

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

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

Ответ 2

Есть пример на 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");
}

Ответ 3

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