web-dev-qa-db-ja.com

C#で別のプロジェクトからプロジェクトを参照するにはどうすればよいですか?

ソリューションにプロジェクトProject2を追加しました。すでに別のプロジェクトがあり、Project 1と言うことができます。project2からproject1にクラスとメソッドを呼び出すにはどうすればよいですか?

私がしたこと:

Project 1とそのソリューションがあります。プロジェクト1のソリューションにプロジェクト2を追加しました。プロジェクト1とプロジェクト2には、どちらもCorrectionという名前空間があります。今、私は修正を使用して呼び出しました。ただし、Project 1でProject2と入力すると、それが何であるかわからないと主張しているため、エラーが発生します。

参照としてプロジェクト2も追加しました。

すべての回答に感謝します。私は私が間違っていることを知りません

29
C..

まず、Project1にProject2への参照を追加する必要があります。

Project1-> References-> Add Referenceに移動すると、ソリューションにプロジェクトを追加し、project2を追加するオプションが表示されます。

参照を追加したら、名前空間Name1.Name2でクラスFooを呼び出すには、クラスを次のように使用できます。

Name1.Name2.Foo foo = new Name1.Name2.Foo(...);

または、入力を避けたい場合は、ファイルの先頭近くにusingステートメントを追加できます

using Name1.Name2;

これで、Fooだけを使用してクラスを参照できます。

Foo foo = new Foo(...);

Project2にfigure out the namespacesがあることに注意してください。 Project2という名前を使用するだけでは機能しません。使用するクラスの宣言を含むファイルを見て、名前空間の定義を探します。

だから何かを見れば

namespace Name1.Name2 {


    class Bar {
        // Blah
    }

    // Notice the Word public here.
    public class Foo {
        // Blah
    }
}

Name1.Name2はFooの名前空間であり、これを使用する必要があります。

また、Project1で使用するクラスのpublicアクセス修飾子が必要になる可能性があることにも注意してください。たとえば、上記のシナリオでは、クラスFooにアクセスできますが、クラスBarにはアクセスできません。

このページは、名前空間を理解するのに役立ちます: http://www.csharp-station.com/tutorials/lesson06.aspx

47
Aryabhatta

呼び出すコードの「パス」を指定する必要があります。あなたはどちらかでこれを達成します

1)使用する2番目のプロジェクト/クラスの名前空間を指定します。通常はコードファイルの先頭にあります。

using MySecondProject;

var foo = new ClassFromSecondProject();

2)名前空間を含め、使用するクラスの名前を明示的に指定する

//do stuff
var foo = new MySecondProject.ClassFromSecondProject();
//do more stuff
3
bakasan

私はこれと全く同じ問題を抱えていました。私はすべてをトリプルチェックし、参照が追加され、プロジェクトは同じソリューションにあり、すべてが設定されました。名前空間も知っています。コード補完も取得しましたが、ビルド時に、名前空間が見つからないという同じエラーが発生しました。

これを見つけるのに1時間かかりました。私が追加したプロジェクトは、それぞれの名前空間が見つからず、別の.NETターゲットフレームワークに設定されていました。ソリューションをクライアントプロファイル4ではなく「完全な」.NET Framework 4に変更しましたが、追加した新しいプロジェクトはクライアントプロファイルに再度設定されました。

構成の誤りについて適切な警告を出す代わりに、名前空間が見つからないと主張しました。

これが誰かを助け、私が無駄にした時間を節約してくれることを願っています。

2
Tom

Project1の参照をProject 2に追加するだけです。これを行うには、ソリューションエクスプローラーペインでReferencesフォルダーを右クリックし、Browseオプションを使用してProject2を検索します。または、すでにソリューションに追加されている場合は、Projectsタブを使用できます。

あなたのためにこれを片付けるためだけに。 Solutionにプロジェクトを追加することは、参照を追加することと同じです。 Visual StudioでProject2を開きます。次に、Project1をソリューションに追加するか、Project2のReferencesフォルダーを右クリックして、Project1への参照を追加します。参照が適切に追加されたことを確認するには、参照フォルダーを展開し、リストにProject1が表示されることを確認します。

新しいコンソールアプリケーションを作成し、それをMyApplicationと呼びます。次に、Solutionを右クリックしてAdd New Projectオプションを選択し、新しいライブラリプロジェクトを作成して、MyLibという名前を付けます。この時点では、1つのソリューションに2つのプロジェクトを追加しただけで、各プロジェクト間の参照は作成されていません。

Referencesプロジェクトの下のMyApplicationフォルダーを右クリックし、Add Reference...を選択します。 MyLibはすでにソリューションの一部であるため、Projectsタブに移動し、リストからMyLibを選択すると、MyApplicationにこのプロジェクトへの新しい参照が作成されます。ソリューションの一部でない場合は、Browseタブを使用して、エクスプローラーでプロジェクトを検索できます。

したがって、この時点で、MyApplication内のMyLibへの参照を確立しました。したがって、MyLib内のクラスをMyApplication内で使用するには、ユニット内でプロジェクトの使用を宣言するか、フルパスを直接使用できます。

// main code file in MyApplication

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MyLib;  // This will allow me to access the classes inside MyLib directly

namespace PdfPrinter
{
    class Program
    {
        static void Main(string[] args)
        {
             // if we have declared the namespace at the top, we can do:
             MyLibClass cls = new MyLibClass();
             // or if you don't want to add the namespace at the top we have to do:
             MyLib.MyLibClass cls = new MyLib.MyLibClass();
        }
    }
}

それがあなたのために少しそれを片付けることを願っています。

2
James

トムの回答に賛成票を投じるのに十分な担当者はいないが、それは私を大いに助けた。さらに、。NET Frameworkの同じSubversionを選択する必要があります(加えて、それは同じフル/コア/標準などです)。テストプロジェクトで4.5を指定していて、このエラーが発生しました。これを4.6.1に変更すると(他のものと同じ)、この問題が修正されます。

1
DaveDean1

使用するプロジェクト(たとえば、project1)を選択し、ソリューションエクスプローラーで右クリックして、[参照の追加]をクリックします。

そこから他のソリューションへの参照を追加できます(project2)。

その後、メインプロジェクト(project1)にusingステートメントを追加するだけで、通常どおりアクセスできます。

1
Jamie Keeling

私はこのエラーで同じ問題を抱えていました。 project2からproject1を検出できませんでした。 project2からproject1への参照を追加しましたが、それでも機能しませんでした。次に、project1をアンロードして、ソリューションから削除しました。それから私はそれを再び追加し、project2とta daからの参照を作成しました...それはうまくいった..... :-)

0
Maryadi Poipo

Project2をProject1の参照に追加する必要があります。これで、Project2からクラスにアクセスできます。正しい名前空間を追加することを忘れないでください!

0
Vlad

他の人が述べたように、(既存の)プロジェクトをソリューションに追加する必要があります。次に、Solution-> Projectsの下にそれらへの参照を追加する必要があります。 Object Browserに名前空間が表示されるはずです。

確認する必要があることがもう1つあります。そのため、いくつかの実験を行って調べました。 2つ目のプロジェクトを追加すると、最初のプロジェクトが機能しなくなり、エラーメッセージはプロジェクトが参照を逃したときと同じでした("タイプまたは名前空間名 'Ber'が見つかりませんでした(ディレクティブまたはアセンブリ参照を使用していますか?) ")。問題は、両方のプロジェクトのデフォルトアセンブリ名( "クラスライブラリ")がプロジェクトにあることです。プロパティ->アプリケーション。一意の名前を付けてください。 Default namespaceと同じものを使用しています。

0
Per