• ベストアンサー

VisualStudio2005

お世話になります。 例えば、同一ソリューション内で2つのプロジェクトがあったとします。どちらにも複数のソースファイルがあります。 このとき一つ目のプロジェクトAのとあるクラスaを、プロジェクトBから参照したいとします。 現在この状況でクラスaの書かれているソースファイルをコピーしプロジェクトBに挿入しているのですが、これでは管理が面倒ですし、スマートではないです。 きっとうまい方法でプロジェクトAのクラスaをプロジェクトBから参照する方法があるのだと思っています。 知っている方よろしくお願いします。

  • ape5
  • お礼率85% (109/127)

質問者が選んだベストアンサー

  • ベストアンサー
  • x0000x
  • ベストアンサー率52% (67/127)
回答No.3

プロジェクトBの「ソリューションエクスプローラ」-「参照設定」で「参照の追加」により表示する「参照の追加」ダイアログの「プロジェクト」タブで「プロジェクトA」を選択し「OK」します。 プロジェクトBにプロジェクトAの参照が追加できます。 プロジェクトBでプロジェクトAのクラスaのコードを書く場合には、Namespaceを意識して記述すれば良いです。 プロジェクトA=namespaceなら プロジェクトA.クラスa obj = new プロジェクトA.クラスa(); などで利用できます。(C#) (Using プロジェクトA;を定義すれば、「クラスa」でOKです) 1つのコードを複数のプロジェクトで利用できるようになり、メンテが楽になります。

ape5
質問者

お礼

回答ありがとうございます。 これは、まさしく求めていた回答です。これは、すごく便利ですね。 ありがとうざいました。

その他の回答 (2)

回答No.2

プロジェクトBにクラスaを追加するときに ファイル選択ダイアログで「リンクとして追加」にすれば プロジェクトB内に実態が作られることがありません。 (私も最近知ったばかりです)

ape5
質問者

お礼

回答ありがとうございます。 このやり方ですと、同一ソリューション内とかにかかわらず、追加できるので便利ですね。ありがとうございました。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 両方ともexeのアセンブリである場合、こいつはなかなかやっかいだ。Visual Studio 2005のプロジェクトはソースやリソースを自分の配下に置きたくて仕方がない。  クラスaをライブラリにするのが本筋なのだろうが、なかなかそうもいかないのでしょうね。できるのであればそうするべきでしょう。  場当たり的な対処としては2つ。1つ目はとてもおすすめできる案では無いのだが・・・・そうねぇ・・・・NTFSには「シンボリックリンク」という機能がある(ハードリンクもあるけど)。これは、UNIX系列のOSでは常識なのだが、複数のフォルダに1つのファイルが存在する機能だ。パワフルなショートカットと思っていただいても良い。で、NTFSにはあるのだが、Windows 2000やXPでは、そのままでは使えない。これを使えるようにするフリーソフトがあるので「シェル拡張 シンボリックリンク」で検索の事。これで、1つのファイルをそれぞれのプロジェクトに納める事が可能となる・・・・ああ、なんて情けない仕様。  もう一つはお金がかかるね。Visual SourceSafe 2005というソフトを使うと、複数のプロジェクトでクラスaを共有する事ができる。さらに、誰かがプロジェクトAでクラスaを直して、他の誰かがプロジェクトBでクラスaを直したためにバッティングしてしまうという事がなくなる。ただ、このソフト、高い! 開発者一人につき9万円もする。CVSやSVNで同じ事ができるかどうかは寡聞にして知りません。  私の頭では以上、3つの案くらいしか浮かばないかなぁ。eclipseみたいにプロジェクト配下の一部分を他の場所に設定できれば良いんだけどね。  ただ、私はやった事無いので分からないが、一つのソリューション内にプロジェクトAとBを両方入れ、BからAを参照すると、ひょっとするといけるのかも知れない。プロジェクトAがdllの場合はこれでいけるが、exe同士だと、分からないな。

ape5
質問者

お礼

回答ありがとうございます。 今回は求めていた回答がほかの2名の方が近いのでポイントはないのですが、大変勉強になりました。シンボリックリンクは初めて聞きました。 VSSもあまり触ったことがなかったので、なるほどと思いました。 またわからないことがありましたらよろしくお願いします。

関連するQ&A

  • VisualStudio2010のデバッグ開始で

    いつもお世話になっております。 VisualStudio2010を利用しています。 1ソリューションの中に複数のWebアプリケーションがあり(A,Bとする) Aのプロジェクト内のファイルを開いている状態でデバッグ開始(F5)を押すと なぜかBプロジェクトのファイルのブラウザが立ち上がってしまいます。 デバッグに関してもBプロジェクトの処理のみブレークしてしまいます。 設定のミスだと思いますが、どこを変更すればよいのか検討付かなくて困っております。 よろしくお願いいたします。

  • VisualStudioでのバージョン更新方法

    VisualStudio2013 でC#を使って開発を行っています。 プロジェクトのアセンブリバージョン、ファイルバージョンの書き換えについて質問させてください。 一つのソリューションの中にいくつかのプロジェクトがあり、 そのバージョンを一つ一つ変更するのが手間なのでバージョンだけを書いたプロジェクトを作り それを各プロジェクトから参照出来ないかと考えました。 VersionLibというプロジェクトを作成しその中に下記のものを作成しました。 /// <summary> /// ヴァージョン管理用クラス /// </summary> public class version { // ヴァージョン情報 public const string A_Lib_Ver = "0.1.0.0"; public const string B_Lib_Ver = "0.1.0.0"; public const string C_Lib_Ver = "0.1.0.0"; public const string TestPrj = "0.1.0.0"; public const string verson_Ver= "0.1.0.0"; } 各プロジェクトのAssemblyInfo.cs の中で [assembly: AssemblyVersion(version.A_Lib_Ver)] [assembly: AssemblyFileVersion(version.A_Lib_Ver)] のような形で記述しました。 ソリューションの構成は TestPrjというプロジェクトがA_Lib、B_Lib、C_Libという3つのプロジェクトを参照しています。 上記の1+3のプロジェクトはVersionLibプロジェクトを参照しています。 A_Lib、B_Lib、C_Lib及び、VersionLibプロジェクトのビルドは通るのですが、TestPrjのビルドが通らず 「エラー 16 ファイル "C:\\TestPrj\Version\bin\Debug\Version.dll" を "bin\Debug\Version.dll" にコピーできません。別のプロセスで使用されているため、プロセスはファイル 'bin\Debug\Version.dll' にアクセスできません。」 と表示されエラーになってしまいます。 ビルドの順番を変えてみたりしましたが変化はありませんでした。 また一度VisualStudioを閉じて再度ソリューションを開くと添付の画像のエラーがでました。 この現象の解決方法がありましたら教えていただきたいです。 また、別の方法でバージョンをまとめて変更できる方法がありましたらそちらでも結構なので教えていただけたら嬉しいです。 宜しくお願い致します。

  • 参照するDLLを格納したフォルダをVSS管理したい。

    参照するDLLを格納したフォルダをVSS管理したい。 ソリューションに、プロジェクトA、プロジェクトBがあり、それぞれフォルダ1の中にある DLLを参照しています。 これをソリューションごとソース管理に追加したいのですが、他のメンバがVSSから 落とした場合、コンパイルが通らなくなるので、参照しているフォルダごとVSSに あげたいのですが…。 ソリューションにフォルダは追加できないようなので、VisualStudioからプロジェクトA、 プロジェクトBにそれぞれフォルダを作り、その中にそれぞれDLLを追加するしかないので しょうか? しかし、DLLのバージョンがあがった場合、大変手間です。 すべてのプロジェクトが同じDLLを参照し、かつ、そのDLLもソリューションに追加し、 ソース管理したときに一緒にVSSにアップロードされるようにはできないのでしょうか? ※VisualStudioは2005です。

  • C# 別プロジェクトのフォームを参照する方法

    同じソリューションに複数のプロジェクトが存在しています。 その中のあるプロジェクト[Aプロジェクト]から別のプロジェクト[Bプロジェクト]に存在する フォームクラスを参照したいのですが、参照できません。 Bプロジェクト内に存在するクラスは参照できるのですが、フォームだけが参照できない状態です。 Bプロジェクトのフォームは、次のように宣言されています。 public partial class frmEdit : Form { ・・・・・・・・・ } もう1つのpartialクラスはfrmEdit.Designnerクラスに存在します。 どうすれば、参照できるようになるでしょうか? ご存知の方、ご教授お願い致します。

  • Visual StudioのF5一発で、変更があるプロジェクトのみビルドしなおしで、実行までの自動化方法についての質問

    質問内容についてまず、結論を書きます。2つあります。 いづれか一方だけの回答でもわかるのであれば、お願いします。 Q1 同一ソリューションファイルに、複数のexeとdllが存在する時に、 「ソリューションのビルド」(リビルドではないです)を実行または、F5キーを押して、実行の行為を おこなった時に、ソースに変更があったプロジェクトのみビルドしなおされるようにする方法を教えてください。 Q2 また、dllの参照設定に指定するdllは2つあるうちのどちらを設定すればよいかを教えてください。そして、その理由もできれば、お願いします。 ↑「2つあるうちのどちらを」はおそらく意味不明だと思いますので、以下の説明のなかで言及します。 <<以後補足説明>> A.exe、B.dll、C.dll、D.dll、E.exe から構成されるアプリケーションを開発中です。 ソリューションファイルのパスは、 C:\hoge\A\A.sln です Aプロジェクトのプロジェクトファイルは C:\hoge\A\A.vbproj プロジェクトファイルについては、A~Eまで同様で、 Aフォルダと、プロジェクトファイル名が、各自のアルファベットにかわっただけです。 2箇所にdllが出力されます。 ア) C:\hoge\B\bin イ) C:\hoge\B\obj\Debug A~Eもアルファベットが異なる、exeとdllが異なる以外は同様です。 Q2の「2箇所」はこれのことです。 Q1ですが、Bプロジェクトのあるソースを修正してF5で実行しても、 B内での変更内容が実行に反映されなかった。 参照設定が原因か?と、(ア)→(イ)に変更しても、結果は同じ。 ソリューションのリビルドまたは、 Bプロジェクト単独でビルドした後にF5キーを押すと、反映されますが・・ そこで、Q1の質問ですが、F5キー一発で、ソリューションのなかで、変更があったソースのプロジェクトのみビルドして、 実行するまでを一発で、やる設定方法はないでしょうか?

  • visualstudioでc#のdllができない

    visualstudio2010を使用しています。 dllの作成をしたいのですが、なぜか作られません。 どこに手順を書きますのでどこに間違いがあるか教えてください。 (1)作成したプロジェクトを開く (2)ファイルー新しいプロジェクトを選択 (3)クラスライブラリを選択 (4)ソリューション(S):ソリューションに追加を選択ーOKボタン (5)DLLの中を書く (6)参照設定を選択する (7)ソリューションのプロパティのビルドでフォルダを指定する。 (8)ビルドする(もちろん通る) しかし、DLLはどこにも見当たらない。 検索しても、クラスライブラリを選択すれば自動的にできると書いてあるので、困り果てています 機能はMEFを使用し、僕ではない人が作ったDLLがすでに追加されており、僕もDLLを追加したいのですが、なぜかDLLが作成されません。 詳しいかたよろしくおねがいします。

  • VisualStudio2012 外部依存関係

    現在、VisualStudioExpress2012を使ってC言語のコードを書いています。 1つのソリューション内に、機能コードを書いてあるプロジェクトAと、 上記機能コードをテストするためのテストコードを記述したプロジェクトBとが ある状態にしたいと考えております。 しかし、プロジェクトBをスタートアッププロジェクトにし、プロジェクトAを外部参照に 割り当てても、コンパイル時にプロジェクトBから呼び出すプロジェクトAの関数check()が、 エラー 1 error LNK2019: 未解決の外部シンボル _check が関数 _main で参照されました。 というエラーになってしまう状況です。 プロジェクトBから呼び出している、関数check()の定義をvisual studio上の機能を用いてジャンプさせると、確かにプロジェクトAにて定義しているコードまでたどり着いており、なぜ「未解決」となってしまうのかが判断できないです。 見落としている点、設定など分かる方がいらっしゃいましたら、ご教授願います。 また、不足情報などございましたら、ご指摘いただければ幸いです。 以上

  • .netとvssについて

    こんにちわ。 いま.net2003で開発している者です。 あるソリューションファイルを作成し, その中に,VBプロジェクトファイルと Webプロジェクトを含んでいます。 ところで,このソリューションファイルを開こうとしたときに, 「ソース管理のバインド情報は,プロジェクト?????(※1)から削除されました。このプロジェクトは,ソース管理なしで開かれます。」 「プロジェクト?????(※1)は,ソース管理下にあります。このプロジェクトをソース管理で登録中にエラーが発生しました。このプロジェクトを変更しないでください。」 (※1)?????:仮想ディレクトリ名 というメッセージが表示されてしまいます。 これらのメッセージ表示ダイアログで[OK]ボタンをクリックすると, ソリューションを開き,ソースを修正することはできます。 上記の2つのメッセージが出る原因はどういうことが考えられるでしょうか? また上記の2つのメッセージが出ないようにするにはどうすれば良いでしょうか? 教えてください。よろしくお願いします。

  • 既作成ソリューション・プロジェクトのコピー手順

    以前VB2008で作成したソリューション・プロジェクト(プログラムAとします)をコピーして、 それをもとに追加機能を付加するため別ソリューション・別プロジェクトとしてコピーしました(「プログラムA_TEST」として元ファイルを単純にコピーしてDIR名をリネーム)。 ところが、プログラムA_TESTを修正し起動させたら、修正した箇所が反映させず、デバッグ(ブレイクポイントを付加)を行うと、ソースとモジュールが相違している旨のメッセージが表示され、「単一インスタンスのアプリケーションを作成する」にチェックをつけて実施すると、ブレイクポイントがプログラムA側のソースに当たります。本来このように元々あるソリューションをコピーする際の手順(なんとなく参照先を修正する必要がありそうに思えますが)があるのでしょうか? ご教示の程よろしくお願いいたします。 参考 プログラムAは4プロジェクト(APプロジェクト、共通機能プロジェクト、汎用機能プロジェクト、DBプロジェクト)で構成しています。 プログラムA_TESTも4プロジェクト(APプロジェクト、共通機能プロジェクト、汎用機能プロジェクト、DBプロジェクト)で構成されています。

  • VC++でプロジェクト名などを変更する方法

    現在VC++で1つのプロジェクト"A"をかなりやりすすめています。 いま、まったく同じようなプロジェクトなんですか、ちょっと細かいところを変更した別のプロジェクト"B"を作りたいと考えています。 内容はかなり似たものなので、"A"をコピーして"B"としたいのですが、ファイル名や関数名、ソリューションエクスプローラなどを変更して、ソリューションのビルドをすると "B" fatal error LNK1104: コンパイラは、ファイル '.\Debug\"A".res' を開くことができません。 となっていまい、関連付けなどがどうやら"A"ファイルのままになってしまっているみたいなんです。 ちなみにリソースビューのプロジェクト名や.rcファイルの名前も変更する方法がわかりません。 それとも、新規作成で"B"というプロジェクトを作り、中身を移してきたほうが早いのでしょうか? 使い始めの初心者で申し訳ないです。 よろしくお願いいたします。

専門家に質問してみよう