C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: exe起動時の例外


(過去ログ 81 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■48109 / inTopicNo.1)  exe起動時の例外
  
□投稿者/ だい (49回)-(2010/03/24(Wed) 18:17:46)

分類:[.NET 全般] 

2010/03/24(Wed) 18:18:05 編集(投稿者)
2010/03/24(Wed) 18:18:02 編集(投稿者)

A.exeからB.exeを起動していますが、「'"dllファイル名",Version=1.0.0,Culture=neutral,PublicKeyToken=null'から型'クラス名'を読み込めませんでした。」
という例外が発生してしまいます。

B.exeではdllファイルを参照していますが、B.exe以外での参照は問題なく動いています。
dllファイルを最新のものにしてもかわりませんでした。

また、A.exeからではなくB.exeを直接起動した場合この例外は発生しません。

問題点として何がありますでしょうか。
よろしくお願い致します。
引用返信 編集キー/
■48110 / inTopicNo.2)  Re[1]: exe起動時の例外
□投稿者/ Jitta on the way (590回)-(2010/03/24(Wed) 18:48:18)
No48109 (だい さん) に返信
> 2010/03/24(Wed) 18:18:05 編集(投稿者)
> 2010/03/24(Wed) 18:18:02 編集(投稿者)
>
> A.exeからB.exeを起動していますが、「'"dllファイル名",Version=1.0.0,Culture=neutral,PublicKeyToken=null'から型'クラス名'を読み込めませんでした。」
> という例外が発生してしまいます。
>
> B.exeではdllファイルを参照していますが、B.exe以外での参照は問題なく動いています。
> dllファイルを最新のものにしてもかわりませんでした。
>
> また、A.exeからではなくB.exeを直接起動した場合この例外は発生しません。
>
> 問題点として何がありますでしょうか。
> よろしくお願い致します。


a.exe、b.exe、dll は、どの様に配置されていますか。
b.exe を実行するときの“カレント ディレクトリ”は、何処ですか。
引用返信 編集キー/
■48123 / inTopicNo.3)  Re[2]: exe起動時の例外
□投稿者/ だい (50回)-(2010/03/25(Thu) 09:02:21)
No48110 (Jitta on the way さん) に返信
> ■No48109 (だい さん) に返信
>>2010/03/24(Wed) 18:18:05 編集(投稿者)
>>2010/03/24(Wed) 18:18:02 編集(投稿者)
>>
>>A.exeからB.exeを起動していますが、「'"dllファイル名",Version=1.0.0,Culture=neutral,PublicKeyToken=null'から型'クラス名'を読み込めませんでした。」
>>という例外が発生してしまいます。
>>
>>B.exeではdllファイルを参照していますが、B.exe以外での参照は問題なく動いています。
>>dllファイルを最新のものにしてもかわりませんでした。
>>
>>また、A.exeからではなくB.exeを直接起動した場合この例外は発生しません。
>>
>>問題点として何がありますでしょうか。
>>よろしくお願い致します。
>
>
> a.exe、b.exe、dll は、どの様に配置されていますか。
> b.exe を実行するときの“カレント ディレクトリ”は、何処ですか。

Cドライブ直下にBSystemフォルダがあり、その中にEXEフォルダがあり、exe、dll共にそこにあります。
なのでA.exe、B.exeはEXEフォルダにあります。

デスクトップにA.exeのショートカットがあり、そこから実行する形です。
引用返信 編集キー/
■48127 / inTopicNo.4)  Re[3]: exe起動時の例外
□投稿者/ やじゅ (1571回)-(2010/03/25(Thu) 12:40:16)
やじゅ さんの Web サイト
No48123 (だい さん) に返信
> デスクトップにA.exeのショートカットがあり、そこから実行する形です。

デスクトップのショートカットからではなく、EXEフォルダのA.exeを直接実行した場合は
どうなりますか?
それで正常に動作するなら、“カレント ディレクトリ”が怪しいです。
引用返信 編集キー/
■48137 / inTopicNo.5)  Re[4]: exe起動時の例外
□投稿者/ 囚人 (486回)-(2010/03/25(Thu) 14:18:22)
No48127 (やじゅ さん) に返信
> ■No48123 (だい さん) に返信


>>デスクトップにA.exeのショートカットがあり、そこから実行する形です。
>
> デスクトップのショートカットからではなく、EXEフォルダのA.exeを直接実行した場合は
> どうなりますか?
> それで正常に動作するなら、“カレント ディレクトリ”が怪しいです。


「カレントディレクトリ」って何の事さしているか微妙に分かりませんが、そんなものはDLLのロードに影響しませんよ。もしそうだったら、全てのアプリケーションがめちゃ起動しにくいでしょう。

A.exeからB.exeの起動ってどうやってるんですか?A.exeも同じDLLを参照したらいいんじゃないです?

引用返信 編集キー/
■48138 / inTopicNo.6)  Re[5]: exe起動時の例外
□投稿者/ だい (51回)-(2010/03/25(Thu) 15:56:28)
No48137 (囚人 さん) に返信
> ■No48127 (やじゅ さん) に返信
>>■No48123 (だい さん) に返信
>
>
> >>デスクトップにA.exeのショートカットがあり、そこから実行する形です。
>>
>>デスクトップのショートカットからではなく、EXEフォルダのA.exeを直接実行した場合は
>>どうなりますか?
>>それで正常に動作するなら、“カレント ディレクトリ”が怪しいです。
>
>
> 「カレントディレクトリ」って何の事さしているか微妙に分かりませんが、そんなものはDLLのロードに影響しませんよ。もしそうだったら、全てのアプリケーションがめちゃ起動しにくいでしょう。
>
> A.exeからB.exeの起動ってどうやってるんですか?A.exeも同じDLLを参照したらいいんじゃないです?
>

自分もカレントディレクトリが何を指すのかわかりません…。

> A.exeからB.exeの起動ってどうやってるんですか?A.exeも同じDLLを参照したらいいんじゃないです?

A.exeはデスクトップのショートカットから起動。B.exeはA.exeからSystem.Diagnostics.Process.Start("フルバス")で起動しています。

exeはすべて同じフォルダに入っているため、どのexeも同じdllを参照していると思われますが…。
引用返信 編集キー/
■48139 / inTopicNo.7)  Re[6]: exe起動時の例外
□投稿者/ 魔界の仮面弁士 (1578回)-(2010/03/25(Thu) 16:52:50)
No48138 (だい さん) に返信
> 自分もカレントディレクトリが何を指すのかわかりません…。
文字通りの意味で良いなら、『System.IO.Directory.GetCurrentDirectory()』だと思います。
設定は SetCurrentDirectory。
ショートカットファイルの「作業フォルダ」を使うと、アプリ起動時のカレントディレクトリを設定できます。

なお、「EXE の配置してあるフォルダ」とは別物です。


> System.Diagnostics.Process.Start("フルバス")で起動しています。
フルバス ではなく
フルパス ですね。


> exeはすべて同じフォルダに入っているため、どのexeも同じdllを参照していると思われますが…。
新規プロジェクトを 3 つ作成し、
 (1) クラスをひとつ定義しただけの マネージ DLL。
 (2) それを参照設定した A.EXE。(1) のクラスを作成した後、内部で B.EXE を Process.Start で起動。
 (3) それを参照設定した B.EXE。(1) のクラスを作成するだけ。
とし、これを起動させる場合にも同じ結果になりますか?

新規プロジェクトで再現しないのであれば、参照設定や型定義などに漏れが無いかどうかを確認してみてください。
引用返信 編集キー/
■48140 / inTopicNo.8)  Re[7]: exe起動時の例外
□投稿者/ なちゃ (412回)-(2010/03/25(Thu) 17:00:34)
念のため確認。
dllをLoadFrom使って動的ロードとかしてません?

引用返信 編集キー/
■48141 / inTopicNo.9)  Re[8]: exe起動時の例外
□投稿者/ なちゃ (413回)-(2010/03/25(Thu) 17:01:45)
No48140 (なちゃ さん) に返信
> 念のため確認。
> dllをLoadFrom使って動的ロードとかしてません?
>

あーでもそれ系だと違うエラーになるかな…

引用返信 編集キー/
■48142 / inTopicNo.10)  Re[7]: exe起動時の例外
□投稿者/ だい (52回)-(2010/03/25(Thu) 18:36:21)
No48139 (魔界の仮面弁士 さん) に返信
> ■No48138 (だい さん) に返信
>>自分もカレントディレクトリが何を指すのかわかりません…。
> 文字通りの意味で良いなら、『System.IO.Directory.GetCurrentDirectory()』だと思います。
> 設定は SetCurrentDirectory。
> ショートカットファイルの「作業フォルダ」を使うと、アプリ起動時のカレントディレクトリを設定できます。
>
> なお、「EXE の配置してあるフォルダ」とは別物です。
>
>
>>System.Diagnostics.Process.Start("フルバス")で起動しています。
> フルバス ではなく
> フルパス ですね。
>
>
>>exeはすべて同じフォルダに入っているため、どのexeも同じdllを参照していると思われますが…。
> 新規プロジェクトを 3 つ作成し、
>  (1) クラスをひとつ定義しただけの マネージ DLL。
>  (2) それを参照設定した A.EXE。(1) のクラスを作成した後、内部で B.EXE を Process.Start で起動。
>  (3) それを参照設定した B.EXE。(1) のクラスを作成するだけ。
> とし、これを起動させる場合にも同じ結果になりますか?
>
> 新規プロジェクトで再現しないのであれば、参照設定や型定義などに漏れが無いかどうかを確認してみてください。

上記の通り、行ってみましたが正常に動作しました。

A→BはエラーでBを直接起動だと正常というのがいまいち良くわからないですね。

>型定義などに漏れが無いか
とはどういうことが考えられるのでしょうか。
引用返信 編集キー/
■48143 / inTopicNo.11)  Re[9]: exe起動時の例外
□投稿者/ Jitta on the way (591回)-(2010/03/25(Thu) 18:51:18)
.NET は、dll の読み込みにカレント ディレクトリは関係なかったですね。失礼しました。

> A.exeからB.exeを起動していますが、「'"dllファイル名",Version=1.0.0,Culture=neutral,PublicKeyToken=null'から型'クラス名'を読み込めませんでした。」
> という例外が発生してしまいます。

ここで表示されている「クラス名」は、意図したものでしょうか。名前空間が違っていることはない?
また、A.exe などをビルドするプロジェクトは、同じソリューションに含まれているでしょうか。あるいは、魔界の仮面弁士さんが「試して」とおっしゃっている環境は、今作られている環境と一致していますか?A.exe と B.exe が、同じ dll から違うクラスを参照していたら、A.exe は成功して B.exe は失敗するってのも有りかな。その場合、B.exe 単独起動ではエラーにならないのが解せないけど。


ん?B.exe をビルドした時の dll バージョンが、配置されているバージョンと違ってたら、どうなるんだっけ?って、これも、単独起動ではエラーにならないのが変か。
引用返信 編集キー/
■48147 / inTopicNo.12)  Re[8]: exe起動時の例外
□投稿者/ 魔界の仮面弁士 (1580回)-(2010/03/25(Thu) 19:05:53)
No48142 (だい さん) に返信
> 上記の通り、行ってみましたが正常に動作しました。
ではそのテストプロジェクトを、徐々に現行プロジェクトに近付けていってみてください。

たとえば今度は、参照する DLL を実際の物に変更したうえで、
A.EXE / B.EXE を新規作成した場合はどうなりますか?

その結果、テストプロジェクトでも現象が再現するようであれば、DLL 側に秘密がありそうですし、
テストプロジェクト側で再現しないようなら、現行プロジェクトの EXE 側に何かあるのかも。


> >型定義などに漏れが無いか
> とはどういうことが考えられるのでしょうか。
分かりません。。。

アプリケーションドメインやリフレクションを操作するような
高度な事を行っているわけでも無いのですよね。


DLL 側に、何か追加のファイルを参照設定させてみるとか、
P/Invoke を行わせるとか、コード アクセス セキュリティに手を加えてみるとか、
netmodule を利用させてみるなど、幾つかの実験をしてみているのですが、
今のところ、同じ現象を再現するには至っていません。


>>>> dllファイルを最新のものにしてもかわりませんでした。
DLL をリビルドした後、A.EXE と B.EXE も、その新 DLL を参照しなおしてリビルドしてみましたか?
引用返信 編集キー/
■48163 / inTopicNo.13)  Re[9]: exe起動時の例外
□投稿者/ だい (53回)-(2010/03/26(Fri) 09:01:48)
No48147 (魔界の仮面弁士 さん) に返信
> ■No48142 (だい さん) に返信
>>上記の通り、行ってみましたが正常に動作しました。
> ではそのテストプロジェクトを、徐々に現行プロジェクトに近付けていってみてください。
>
> たとえば今度は、参照する DLL を実際の物に変更したうえで、
> A.EXE / B.EXE を新規作成した場合はどうなりますか?
>
> その結果、テストプロジェクトでも現象が再現するようであれば、DLL 側に秘密がありそうですし、
> テストプロジェクト側で再現しないようなら、現行プロジェクトの EXE 側に何かあるのかも。
>
>
>>>型定義などに漏れが無いか
>>とはどういうことが考えられるのでしょうか。
> 分かりません。。。
>
> アプリケーションドメインやリフレクションを操作するような
> 高度な事を行っているわけでも無いのですよね。
>
>
> DLL 側に、何か追加のファイルを参照設定させてみるとか、
> P/Invoke を行わせるとか、コード アクセス セキュリティに手を加えてみるとか、
> netmodule を利用させてみるなど、幾つかの実験をしてみているのですが、
> 今のところ、同じ現象を再現するには至っていません。
>
>
> >>>> dllファイルを最新のものにしてもかわりませんでした。
> DLL をリビルドした後、A.EXE と B.EXE も、その新 DLL を参照しなおしてリビルドしてみましたか?

お手数をお掛けしてしまい、申し訳ありません。

まず、A.exe、B.exeに実際のdllを参照させてみましたが、正常に動作しました。
両exeを再度参照設定をやり直し、ビルドしましたが同様のエラーに陥っています。

他exeからの起動はエラー、単独での起動は正常に動くとなると、ひとつのdllを共有して参照していることが気になりますが、問題ないのでしょうか?
A.exeがdllを参照していて実行中のまま、同じdlを参照するB.exeを起動した場合参照はうまくいきますか?

またどの時点で起こっているのか追跡するために、確認のメッセージを出力させてみましたが、メッセージが出る前にエラーとなっています。
引用返信 編集キー/
■48223 / inTopicNo.14)  Re[10]: exe起動時の例外
□投稿者/ だい (54回)-(2010/03/29(Mon) 16:56:44)
dllの構成を変えたら正常に動作するようになりました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -