- PR -

モジュール(dllファイル)の構成について

投稿者投稿内容
ax
常連さん
会議室デビュー日: 2004/04/07
投稿数: 34
お住まい・勤務地: 東京
投稿日時: 2006-02-03 11:45
/binフォルダでは余計なDLLは消しています。
現状は、同じネームスペースを持つクラスが別ファイルで作成されているあたりが怪しいかなと考えています。
試しに、簡単なプログラムで
[test.vb]
Imports System
Imports Sample.Tests
Namespace Sample
Module Module1
Sub Main()
Dim t2 as Test2 = New Test2()
Console.Write(t2.gets())
Dim t3 as Test3= New Test3()
Console.Write(t3.gets())
End Sub
End Module
End Namespace

[test2.vb]
Imports System
Namespace Sample
public class Test2
public function gets() as String
return "ret"
End function
End Class
End Namespace

[test3.vb]
Imports System
Namespace Sample.Tests
public class Test3
public function gets() as String
return "test3"
End function
End Class
End Namespace

という3つのソースを書き、test2とtest3をまとめて1つのdllにコンパイルし、test.vbをexeにして、test.exeを実行したところ、下記のエラーが発生しました。
[発生したエラー]
ハンドルされていない例外 : System.TypeLoadException: アセンブリ 'test, Version=0.0.0.0, Cu
lture=neutral, PublicKeyToken=null' から型 'Sample.Test2' を読み込めません。
at Sample.Module1.Main()

単純に全部まとめてしまってもうごかないんですね。もう少し、調べてみたいと思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-03 11:55
引用:

axさんの書き込み (2006-02-03 11:45) より:

現状は、同じネームスペースを持つクラスが別ファイルで作成されているあたりが怪しいかなと考えています。


というか一意にしなきゃ判断できないですよね?

引用:

単純に全部まとめてしまってもうごかないんですね。もう少し、調べてみたいと思います。


そのために、名前空間というものが存在するわけですが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2006-02-03 13:06
南部です。

'test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
これから察するに、test.dllになってませんか?
test.exeと同じアセンブリ名だから見つからないのでしょう。

>vbc /t:library /out:testLib.dll test2.vb test3.vb
>vbc /t:exe /out:test.exe /r:testLib.dll test.vb
>test.exe
rettest3
ax
常連さん
会議室デビュー日: 2004/04/07
投稿数: 34
お住まい・勤務地: 東京
投稿日時: 2006-02-03 13:10
引用:

というか一意にしなきゃ判断できないですよね?
引用:

単純に全部まとめてしまってもうごかないんですね。もう少し、調べてみたいと思います。


そのために、名前空間というものが存在するわけですが...


一意という意味では、同じネームスペースに同じ名前のクラスは存在しませんし、特にクラス名が重複しているわけでもないです。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-02-03 13:16
引用:

じゃんぬねっとさんの書き込み (2006-02-03 11:55) より:
引用:

axさんの書き込み (2006-02-03 11:45) より:

現状は、同じネームスペースを持つクラスが別ファイルで作成されているあたりが怪しいかなと考えています。


というか一意にしなきゃ判断できないですよね?

引用:

単純に全部まとめてしまってもうごかないんですね。もう少し、調べてみたいと思います。


そのために、名前空間というものが存在するわけですが...




多分、ファイル単位、名前空間単位、アセンブリ単位がごっちゃになっているだけかもしれないです。

引用:

同じネームスペースを持つクラスが別ファイルで作成されている


そうだとしてもクラス名が違えばよい。別ファイルとか関係ないです。また、アセンブリが違うとか同じとかも関係ないです。

_________________
囚人のジレンマな日々

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