С# 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