回答:
P2からP1への参照を追加するだけです
直接アクセスするP1のタイプには十分なアクセスレベルが必要であることに注意してください。通常、これはそれらを公開する必要があることを意味します。
Paul Ruaneは正解です。私は自分でプロジェクトを構築しようとしました。SLN全体を作成して、機能するかどうかをテストしました。
私はVC#VS2008でこれを作りました
<<(これを()コメントで読む他の人々を助けるだけ)
ステップ1:
DoubleProjectと呼ばれるソリューションを作成する
ステップ2:
DoubleProjectTwoという名前のソリューションでプロジェクトを作成します(これを行うには、ソリューションファイルを選択し、右クリック->追加->新しいプロジェクト)
同じソリューションに2つのプロジェクトがあります
ステップ3:
ポール・ルアンが述べたように。ソリューションエクスプローラーの参照に移動します(閉じている場合は、コンパイラーの[表示]タブにあります)。DoubleProjectTwoは、DoubleProjectの関数/メソッドを必要とするものであるため、DoubleProjectTwoの右マウスリファレンスで->追加->プロジェクト-> DoubleProjectを選択します。
ステップ4:
名前空間のディレクティブを含めます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DoubleProject; <------------------------------------------
namespace DoubleProjectTwo
{
class ClassB
{
public string textB = "I am in Class B Project Two";
ClassA classA = new ClassA();
public void read()
{
textB = classA.read();
}
}
}
ステップ5:
結果を証明するものを見せてください:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DoubleProject
{
public class ClassA //<---------- PUBLIC class
{
private const string textA = "I am in Class A Project One";
public string read()
{
return textA;
}
}
}
メイン
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DoubleProjectTwo; //<----- to use ClassB in the main
namespace DoubleProject
{
class Program
{
static void Main(string[] args)
{
ClassB foo = new ClassB();
Console.WriteLine(foo.textB);
Console.ReadLine();
}
}
}
トリックをすべきです
お役に立てれば
編集::: whoopsは実際に文字列を変更するためのメソッド呼び出しを忘れました、同じことをしないでください:)
新しい開発者がこの単純な質問をすることがよくありますが、これは特にVisual Studio IDEに共通の問題です。特定の質問に答え、よくある質問に答えたり、よくある問題に答えない解決策を「推測」したりする人はほとんどいません。最初の一般的な問題は、プロジェクト名を変更しない限り、IDEが新しいファイル(.java、.py、.cpp、.c)を既存のソリューションに追加するのではなく、新しいプロジェクトを作成することです(デフォルトでは、新しいソリューションが作成されます)。現在のソリューションに追加します。この問題は、Python、java、c#、C ++、およびCプロジェクトフォルダーで発生します。
IDEのnew> project> project typeコマンドを使用して別のプロジェクトを追加する場合、これは発生しません。ここでの問題は、新しいプロジェクトが既存のクライアントまたはユーザーインターフェイスのコードファイルとは別のディレクトリに保存されていることです。新しいプロジェクトではなく、同じプロジェクトスペースに新しい「ファイル」を作成するには、初心者はMicrosoftが実行しない次のことを行う必要があり、デフォルトでは直感的に明らかなものから離れてしまいます。
これで、ライブラリのインポートまたは名前空間の使用に関するコードの推奨事項は上記のコメントで説明されているように機能し、Microsoftが簡単に変更できないパスステートメントやソリューションパスとソリューション名を変更する必要はありません(つまり、ファイル名またはプロジェクト名ですが、IDEはプロジェクトパスまたはソリューションパス名を自動的に変更しません)。
以下はPythonの例ですが、C#、java、またはC / C ++でinclude、namespaces、または各言語に適したコードコマンドを使用して同じディレクトリスペースの他のクラス/プロジェクトでコードを検索する場合と同様に機能します。
同じディレクトリ内の他のコードファイルからインポートするアプリケーションファイル「hello world」。
このスタックオーバーフローコメントエディターでは、pythonの空白区切り文字が正しくスペースに入れられないことに注意してください。
print ("test")
from CIXMPythonFacade import ClassA
c1=ClassA
c1.methodA()
from CIXMPythonFacade import functionA
functionA()
class ClassName(object):
def __init__(object, parameter):
object.parameter = value
インポートするクラス、メソッド、または関数を含むライブラリファイルまたは「ファサード」ファイル。
class class1(object):
"""description of class"""
class ClassA(object):
print ("test2")
def methodA():
print ("test3")
def functionA ():
print ("test4")
return (0)
pass
今、IDEがあなたを導く混乱を実際にどのように解決しますか?同じディレクトリスペース内の別のファイルからコードをインポートするには、そのファイルへの参照を追加します。
この問題を解決したので、2つの別々のプロジェクトを同じソリューション空間で実際にどのようにリンクしますか?
Microsoftはこれらの問題を本当に修正する必要があるため、ほとんどの人が新しいファイルとして作成したいものを同じディレクトリに直感的に作成し、ソリューションを選択してIDEから削除することでソリューションを削除できます。初心者は、熟練した開発者には非常に柔軟なディレクトリパスステートメントに非常に不満を感じますが、デフォルトでは新しい開発者には不公平です。
これが本当にあなたの新しい人を助け、熟練した開発者があなたのためにうまくいかない間違った答えを与えるのを止めることを願っています。彼らはあなたがすでにパスステートメントを理解していて正しいコードをタイプしたいだけだと仮定しています...それはまた、あなたのコードを修正しようとするトンネルがあなたの問題を修正するのを助けない理由でもあります。これはおそらく、スタックオーバーフローで継続的に説明される最も一般的な問題であり、新しいプログラマーには機能しない誤った回答が含まれます。
最初のステップは、次のようにしてP2をP1に参照することです。
次に、P1のクラスがP2からアクセス可能であることを確認する必要があります。最も簡単な方法はそれらを作ることpublic
です。
public class MyType { ... }
これで、完全修飾名を使用してそれらをP2で使用できるようになります。P1の名前空間がProject1であるとすると、次のように機能します
Project1.MyType obj = new Project1.MyType();
ただし、使用方法を追加して、Project1
修飾なしでタイプを使用できるようにすることをお勧めします。
using Project1;
...
public void Example() {
MyType obj = new MyType();
}
1つのソリューションフォルダーに2つのプロジェクトがある場合、名前空間を使用してプロジェクトの参照を別のプロジェクトに追加するだけで、クラスを取得できます。必要なクラスのオブジェクトを作成している間。必要なメソッドを呼び出します。
FirstProject:
class FirstClass()
{
public string Name()
{
return "James";
}
}
ここに2番目のプロジェクトへの参照を追加します
SecondProject:
class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}
さまざまなターゲットフレームワークで問題が発生しました。
私はすべてを正しく行っていましたが、P2で参照を使用できませんでした。P1とP2に同じターゲットフレームワークを設定した後、それは魅力のように機能しました。
それが誰かを助けることを願って
The name ... does not exist in the current context. Cannot resolve symbol ...
が、プロジェクトのターゲットフレームワークを一致するように変更するまでなどのエラーが発生しました。(プロジェクトを右クリックして、Project -> Properties -> Target framework
これを変更ためにます。)