- PR -

複数クラスをDLL化(クラスライブラリ)

投稿者投稿内容
tamao30
常連さん
会議室デビュー日: 2004/11/16
投稿数: 34
投稿日時: 2006-06-28 23:37
まことにありがとうございます。

Visual Studio 2003(Pro)を使っております。
単一クラスでは、他を参照している箇所をコメント化して外すとできます。
名前空間は下記のように1つのディレクトリの中だけで使ってます。

深山さんのおっしゃる1〜3の手順で、下記の例でclsA〜clsIまで行いましたが、
ビルドすると、"〜のメンバではありません"、"〜は定義されてません" のエラーがでます。
このsrcディレクトリ以下はシステムの一部で正常に使われているのですが、この部分のDLL化をしたいと思っています。

やはり、まとめて一発ではなく、エラーを1つ1つ参照など解きながらやるしかないのでしょうか?(実際は数10個のファイルがあります。)

src
├─bin
├─Com
│ └─bin
│ └clsA.vb(Namespace Com)
│ └clsB.vb(Namespace Com) 
│ └clsC.vb(Namespace Com)

├─Design
│ └clsD.vb
│ └clsE.vb
│ └clsF.vb

└─Tool
 └clsG.vb
└clsH.vb 
└clsI.vb

[ メッセージ編集済み 編集者: tamao30 編集日時 2006-06-28 23:39 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-29 00:09
引用:

tamao30さんの書き込み (2006-06-28 23:37) より:

このsrcディレクトリ以下はシステムの一部で正常に使われているのですが、この部分のDLL化をしたいと思っています。


1 つのアセンブリ (DLL) にしたいのでしょうか?
それとも、複数個 (この名前空間の単位) のアセンブリにしたいのでしょうか?

ソリューションとプロジェクトの構成や配置関係はどうなっているのでしょうか?

引用:

やはり、まとめて一発ではなく、エラーを1つ1つ参照など解きながらやるしかないのでしょうか?(実際は数10個のファイルがあります。)


? 別にどちらの方法でも正しく参照さえしていれば、普通にできますよね。
ソリューションの構成 (プロジェクトの構成) が不明なので、具体的にどうとは言えませんが。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
深山
ベテラン
会議室デビュー日: 2006/05/09
投稿数: 66
お住まい・勤務地: 都内某所
投稿日時: 2006-06-29 00:32
べるさんや皆さんの発言のように名前空間の問題のように思えたので、
とりあえず、サンプルを書きます。
見当違いならごめんなさいm(__)m

コード:
' Comフォルダ Class1.vb 
Namespace Com

    Public Class Class1
        Private c3 As Class3 = New Class3

        Public Sub function1()
            Call c3.function3()
        End Sub
    End Class

End Namespace

コード:
' Designフォルダ Class2.vb
Imports ClassLibrary1.Com
'ClassLibrary1はルート名前空間

Public Class Class2
    Private c1 As Class1 = New Class1

    Public Sub function2()
        Call c1.function1()
    End Sub

End Class

コード:
' Toolフォルダ Class3
Public Class Class3
    Public Sub function3()

    End Sub

End Class


上記のコードは、Class2が名前空間ComのClass1のインスタンスを生成し、Class1がClass3のインスタンスを生成しています。

名前空間が違う場合は、Importsで名前空間を参照できるように宣言してください。
特に名前空間を指定していない場合は、名前空間はルート名前空間になります。

#たとえクラスのファイルを配置しているフォルダが違っていても、名前空間が同じなら、普通に参照できます。

引用:

じゃんぬねっとさんの書き込み (2006-06-29 00:09) より:

? 別にどちらの方法でも正しく参照さえしていれば、普通にできますよね。
ソリューションの構成 (プロジェクトの構成) が不明なので、具体的にどうとは言えませんが。


皆さんが発言しているように、参照関係を確認してください。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-29 00:43
引用:

深山さんの書き込み (2006-06-29 00:32) より:

引用:

じゃんぬねっとさんの書き込み (2006-06-29 00:09) より:

? 別にどちらの方法でも正しく参照さえしていれば、普通にできますよね。
ソリューションの構成 (プロジェクトの構成) が不明なので、具体的にどうとは言えませんが。


皆さんが発言しているように、参照関係を確認してください。


あれれ? 私だけ 「流れ」 から取り残されているんでしょうか...
複数のアセンブリであれば、依存関係の階層さえ守れば普通にできますし、
単一のアセンブリであれば、依存関係は無関係なので、より容易くできると思っているのですが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
tamao30
常連さん
会議室デビュー日: 2004/11/16
投稿数: 34
投稿日時: 2006-06-29 01:27
じゃんぬねっとさんすみません。

1.新規作成のプロジェクトからクラスライブラリを選択
2.概存項目の追加からクラスファイルを追加
という方法で試しておりますが、

単一のアセンブリとは、クラスを1つの.vbファイルにまとめて書いて、クラスライブラリに追加するということでしょうか?

また複数のアセンブリで依存関係の階層さえ守るようにするには、[概存項目の追加]で複数の.vbファイルを選択して追加するだけで可能でしょうか?
深山
ベテラン
会議室デビュー日: 2006/05/09
投稿数: 66
お住まい・勤務地: 都内某所
投稿日時: 2006-06-29 01:43
引用:

じゃんぬねっとさんの書き込み (2006-06-29 00:43) より:
引用:

深山さんの書き込み (2006-06-29 00:32) より:

引用:

じゃんぬねっとさんの書き込み (2006-06-29 00:09) より:

? 別にどちらの方法でも正しく参照さえしていれば、普通にできますよね。
ソリューションの構成 (プロジェクトの構成) が不明なので、具体的にどうとは言えませんが。


皆さんが発言しているように、参照関係を確認してください。


あれれ? 私だけ 「流れ」 から取り残されているんでしょうか...
複数のアセンブリであれば、依存関係の階層さえ守れば普通にできますし、
単一のアセンブリであれば、依存関係は無関係なので、より容易くできると思っているのですが...




すいません、僕の方が話の流れから反れていました。m(__)m
クラスライブラリの作成の容易さなら単一アセンブリの方が容易ですね。

確かに参照エラーで悩むぐらいなら、単一アセンブラにした方が早いかもしれませんね。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2006-06-29 08:11
namespaceの名前からみてユーザコントロールとかそういった系のクラスだと予想。
クラスライブラリプロジェクトって確かデフォだとSystem.Windows.Formsって参照設定されてないですよね?
だから参照設定が足りてないような気がします。


「"〜のメンバではありません"、"〜は定義されてません"」の〜の部分はご自分で作られたクラスですか?
こっそりとSystem.Windows.Forms.Buttonとかそういったのが入ってません?

[ メッセージ編集済み 編集者: Kazuki 編集日時 2006-06-29 08:12 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-29 10:09
引用:

tamao30さんの書き込み (2006-06-29 01:27) より:

単一のアセンブリとは、クラスを1つの.vbファイルにまとめて書いて、クラスライブラリに追加するということでしょうか?


それならば 1 つのファイルという言い方をします。
アセンブリの単位とはプロジェクトの単位です。
ビルドした時にできる DLL がアセンブリになります。

引用:

また複数のアセンブリで依存関係の階層さえ守るようにするには、[概存項目の追加]で複数の.vbファイルを選択して追加するだけで可能でしょうか?


重複しそうですが、アセンブリ間の依存関係はファイルではなく、プロジェクト関連の問題です。
今、単一のプロジェクトでやっていれば単一のアセンブリ (1 つの DLL) ができあがりますよね。

引用:

深山さんの書き込み (2006-06-29 01:43) より:

すいません、僕の方が話の流れから反れていました。m(__)m
クラスライブラリの作成の容易さなら単一アセンブリの方が容易ですね。
確かに参照エラーで悩むぐらいなら、単一アセンブラにした方が早いかもしれませんね。


すみません、深山さんのレスを私が勘違いしていたのかもしれません。
最後の 1 文は、私の発言を引用しての発言でしたので、
私に対して発言してなさっているように見えたのですが、そうではなさそうですね。(;^-^)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

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