2010-12-10 27 views
14

プログラムに参照をソリューションに追加することはできますか?c#Visual Studio ...プログラムによって参照を追加する

私はアドインボタンを持っています。ユーザーがそれを押すと、リファレンスが追加されます。これは可能ですか?

+1

を追加取得し、これを必要としますか? – Bernard

+0

これが可能かどうかを知ることに興味がありますか、これを実現するには_how_ですか? – Oded

+0

可能です。私は前にそれをやった。私はそれを行うのに使用されたコードを覚えていません – scott

答えて

6

私はそれを

をテストしていませんが、このような何かが

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

なぜダウン投票? ***サードパーティライブラリを使わずにプラグインをロードする方法は***です***。 'Assembly.Load'と' Activator.CreateInstance' – jgauffin

+2

これは、ソリューションへの参照を追加しません。実行中のコードに対して単に 'Assembly'をロードします。 –

+0

一部の人々はちょうど奇妙です!私はそれをアップアップしました - 応答に感謝します。 –

2

CodeProject上の例がありますを取得することができます確信しています。

機能は単一のクラスelRefManagerに含まれており、呼び出すメソッドはCheckReferencesです。コードはhereで見ることができます。左側の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"); 
} 
+0

これはDarrenが求めているものと直接関係しています。彼はDEVインスタンス/ソリューション/プロジェクトシステムへのアクセス権を持つ*アドイン*からプログラマチックにプロジェクトへの参照を追加する方法を尋ねています。彼は実行時にアセンブリを動的にロードする方法を尋ねていません。 – casperOne

+0

私はダーレンがコードを見てアドインに組み込む方法を理解することができると書いておきます(これは実行中のオブジェクトテーブルにアクセスしてから同じインターフェイス〜であろう)。 – casperOne

+0

@casperOneそれに応じて更新されました... –

関連する問題