- PR -

複数のプロジェクトが参照する定数の定義方法

1
投稿者投稿内容
Bell
会議室デビュー日: 2004/03/09
投稿数: 13
投稿日時: 2004-06-01 13:43
いつもお世話になっています。

現在、複数人でWindowsアプリケーションを作成しています。
構成は複数のクラスライブラリを作成、それをフォームが利用する、という形を取っています。

作成する上で。クラスライブラリとフォーム双方で使用する定数の定義を別のcsファイルに書き出し、そのファイルを両方でプロジェクトに追加し、利用することにしました

そして作成したクラスライブラリをフォームにテスト的に結合させてみたところ、

'type' は 'assembly' の定義を使って、複数の場所で定義されています。

という警告が双方で使用している定数すべてに出てしまいました。
どうやら追加したファイルが各プロジェクトごとに別ものとして判断されてしまい、定数の多重定義となってしまっているようでした。

そこで、先のcsファイルをライブラリ化して参照すればいいのでは?と思い、クラスライブラリにして参照させたところ警告は出なくなったのですが、今度はインテリセンス機能で定数を指定できなくなってしまい利便性が悪くなってしまいました…。

今現在、この2つの方法のどちらで開発を進めていけばいいのか迷っているのですが、この二つ以外に複数の場所から参照される定数の定義方法はあるのでしょうか?

ご存知の方、ご教授の程よろしくお願いいたします。

#件名が本文の内容とあっていなかったので修正しました。

[ メッセージ編集済み 編集者: Bell 編集日時 2004-06-01 14:16 ]
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-06-01 14:21
引用:

Bellさんの書き込み (2004-06-01 13:43) より:

そこで、先のcsファイルをライブラリ化して参照すればいいのでは?と思い、クラスライブラリにして参照させたところ警告は出なくなったのですが、今度はインテリセンス機能で定数を指定できなくなってしまい利便性が悪くなってしまいました…。


この方法が普通だと思いますし、参照設定すればインテリセンスもちゃんと利用できるはずですが…
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-06-01 14:29
>クラスライブラリとフォーム双方で使用する定数の定義を別のcsファイルに書き出し

これは、constの付いたフィールドを持つクラスを新しく作成したと読んでよろしいでしょうか?

>csファイルをライブラリ化して参照すればいいのでは?と思い

これは、上記のクラスを含むdllを作成して、クラスライブラリとフォーム両方から参照するということですか?

以下のようにプロジェクトを作ってみましたが、インテリセンスに定数のメンバが出てきました。
ClassLibrary1プロジェクトに
コード:
namespace ClassLibrary1
{
    public class Class1
    {
        public const string ss = "ssadasdas";
    }
}


こう。でWindowsApplication1プロジェクトはClassLibrary1.dllを参照して
コード:
namespace WindowsApplication1
{
    public class Form1 : System.Windows.Forms.Form
    {

        private void Form1_Load(object sender, System.EventArgs e)
        {
            ClassLibrary1.Class1.ss    ←ここ ssがメンバに表示された
        }

    }
}


です。
Bell
会議室デビュー日: 2004/03/09
投稿数: 13
投稿日時: 2004-06-01 15:27
引用:

一郎さんの書き込み (2004-06-01 14:29) より:
>クラスライブラリとフォーム双方で使用する定数の定義を別のcsファイルに書き出し

これは、constの付いたフィールドを持つクラスを新しく作成したと読んでよろしいでしょうか?

>csファイルをライブラリ化して参照すればいいのでは?と思い

これは、上記のクラスを含むdllを作成して、クラスライブラリとフォーム両方から参照するということですか?


はい。双方で共通の定数をフィールドを持ったクラスで定義し、それを参照するという形を取っていました。

返答があった後、もう一度参照を追加し、試してみたところインテリセンスを利用することができました。

条件がわからないのですが、私の開発環境で時々インテリセンスが無効になってしまう症状が出ており、今回のもどうやらそちらのほうに原因があったようです…

なちゃさん、一郎さん
見当はずれの質問にお答えいただきありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-01 15:28
引用:

Bellさんの書き込み (2004-06-01 13:43) より:

そこで、先のcsファイルをライブラリ化して参照すればいいのでは?と思い、クラスライブラリにして参照させたところ警告は出なくなったのですが、今度はインテリセンス機能で定数を指定できなくなってしまい利便性が悪くなってしまいました…。


 コンパイルしていないとか?VB.NET(やそれ以前)と違って、C#ではコンパイルしないとインテリセンスが有効にならないようです。有効にならない、というか、情報を引っ張ってこれない、という方が正しいかな?dllファイルが、参照しているところにある必要はありませんが、dllファイルが生成されていないとダメなようです。
1

スキルアップ/キャリアアップ(JOB@IT)