- PR -

dllに後から厳密名をつけたい

投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2005/02/24
投稿数: 55
投稿日時: 2006-09-20 01:20
すでに厳密名なしで作成しているdllに
後から厳密名をつけることは可能でしょうか?
.NETはまだ手探り状態で
厳密名の定義の理解も怪しいですが、
なにか答え、アドバイスなどありましたら
どうか教えてください。
よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-09-20 09:18
引用:

未記入さんの書き込み (2006-09-20 01:20) より:

すでに厳密名なしで作成しているdllに後から厳密名をつけることは可能でしょうか?


'後から' のタイミングが良くわからないのですが、アセンブリに遅延署名をしたいということでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
ベテラン
会議室デビュー日: 2005/02/24
投稿数: 55
投稿日時: 2006-09-20 10:35
引用:

'後から' のタイミングが良くわからないのですが、アセンブリに遅延署名をしたいということでしょうか?



遅延署名というのは厳密名をもっているDLLに対して後から署名をすることですよね。

私の場合は自分のプログラムにフリーのDLLを
参照してコンパイルをしようとしているのですが
そのDLLが「厳密名を持っていません」といわれてしまいます。
つまりDLL自体に厳密名がつけられていないのだと思ってます。
そのようなDLLに対して後から厳密名をつける方法を探してます。

普通DLLはビルド時に厳密名をつけるものだと思うので、
すでにビルド済みのDLLに対して厳密名をつけるのに困ってます。




どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-09-20 10:59
単に参照して利用したいだけなら厳密名を求められることはないはずです。
なぜ「厳密名を持っていません」といわれるのか、それが本当に必要なのかを
調べてみたほうがいいように思います。
未記入
ベテラン
会議室デビュー日: 2005/02/24
投稿数: 55
投稿日時: 2006-09-20 11:04
引用:

単に参照して利用したいだけなら厳密名を求められることはないはずです。
なぜ「厳密名を持っていません」といわれるのか、それが本当に必要なのかを
調べてみたほうがいいように思います。




COMを使ったプログラムを組んでるので
それで厳密名をもっている必要があるのだと思ってます。
自分でソースからビルドしたDLLも
厳密名をつける必要があったので、
たぶん厳密名は必要なんだと思います。


ピカード
常連さん
会議室デビュー日: 2006/09/01
投稿数: 37
お住まい・勤務地: 関西
投稿日時: 2006-09-20 11:50
引用:

未記入さんの書き込み (2006-09-20 10:35) より:
引用:

'後から' のタイミングが良くわからないのですが、アセンブリに遅延署名をしたいということでしょうか?



遅延署名というのは厳密名をもっているDLLに対して後から署名をすることですよね。

私の場合は自分のプログラムにフリーのDLLを
参照してコンパイルをしようとしているのですが
そのDLLが「厳密名を持っていません」といわれてしまいます。
つまりDLL自体に厳密名がつけられていないのだと思ってます。
そのようなDLLに対して後から厳密名をつける方法を探してます。

普通DLLはビルド時に厳密名をつけるものだと思うので、
すでにビルド済みのDLLに対して厳密名をつけるのに困ってます。




署名をすると厳密名を持つことになると思いますが、違いました?
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-09-20 12:30
一応、regasm.exe で /codebase 付けて厳密名なしのアセンブリを登録することはできます。警告は出ますけど。
ですので、自分で作った DLL に対して厳密名を付けなければ一応の対処にはなります。
もちろん、警告の内容を理解できて且つそのリスクを許容できる場合のみとすべきですが。

必ずしも COM に登録するに当たって /codebase オプションを付けなければならないわけではありません。運用によってはこれで問題ない場合もあります。この場合も、自作アセンブリに厳密名を付けないことになります。
GAC に登録した場合は不要ですがそもそも厳密名がなければ GAC に登録できないのでこれは除くとして、条件はアセンブリが公開する COM オブジェクトを要求する実行ファイルが見つけられる位置にアセンブリが存在すること。たとえば実行ファイルと同じディレクトリにアセンブリを配置するとか。
たとえば WSH から使う場合は cscript.exe/wscript.exe と同じ system32 ディレクトリにアセンブリを配置します。
// %PATH% は検索したっけ?

厳密名を付けたいのなら、その DLL の作者に頼むしかないでしょう。

ところでアセンブリを COM に公開することを念頭に書きましたが、そうではなかったですかね?
COM を使ったという表現が少々曖昧ですが。
未記入
ベテラン
会議室デビュー日: 2005/02/24
投稿数: 55
投稿日時: 2006-09-20 21:55
いろいろ試してみました。

@sn.exe -R の実行
上記コマンドで署名をしようとしても
dllが「厳密な名前をもっていません」といわれるのでうまく署名できません。

Aregasm.exe /codebase の実行
Bregasm.exe /tlb を実行
上記コマンドのどちらかの作用でVSプロジェクトの[参照の追加]-[COM]に
登録したDLLが現れていたので参照を追加してみようとしましたが、
「ActiveXタイプライブラリ'(ライブラリ名).tlb'が.
NETアセンブリからエクスポートされましたが参照として追加できません。
.NETアセンブリへの参照を追加してください」と
言われます。



上記エラーの「.NETアセンブリへの参照を追加してください」というエラーは
どういう意味か分からないでしょうか?
検索してもヒットしません。
これはいったい何を言ってるのか教えていただけないでしょうか?









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