• 締切済み

意味不明の実行時エラーで困っています

作成したC#プログラムをコマンドプロンプト上でコンパイルし、実行すると下記のエラーが発生し、途方に呉れております。どうか原因と対策を教えてください。 エラー内容「例外発生(Main)ファイルまたはアセンブリ 'MyClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。 場所 test09.test09.WinForm..ctor() 場所 test09.test09.Main()」 このC#プログラムは、まずクラスライブラリ(MyClassLibrary1)をVisualStudio上で作成し、次にそのテスターを同じくVisualStudio上で作成し動作確認をした後、そのテスターをコピーして新しいプログラムとして、今度はコマンドプロンプト上でコンパイルしたものです。この時の参照設定は「/r:Microsoft.VisualBasic.dll,MyClassLibrary1.dll /lib:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727,C:\MyClassLibrary1\MyClassLibrary1\bin\Release」としました。コンパイルエラーは一切ありません。 何故VisualStudio上でうまく動作するものを、コマンドプロンプト上でやり直すのかには、それなりの理由があるのですが説明は文字数制限で省略いたします。必要とされている事とご理解ください。

みんなの回答

回答No.3

大前提ですが,アプリケーション構成ファイルを利用する方法は避けられるなら避けることをお勧めします。 扱いが非常に面倒です。 # 厳密名付きのアセンブリであれば面倒であっても意味があるので,避けない,という選択肢が存在しますが。 今回の場合は厳密名が付いていないので,アセンブリをおける場所が非常に限られます。 まず,おける場所は.exeと同じディレクトリか,その配下ディレクトリになります (仮に,LibraryDirとします)。 次に,アプリケーション構成ファイル (*.exe.config) に,以下の記述のどちらかを追加します (既存の場合はマージすること)。 a.) dependencyAssembly要素を利用 <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="MyClassLibrary1" /> <codeBase href="LibraryDir/MyClassLibrary1.dll" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration> b.) probing要素を利用 <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="LibraryDir" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration> これによって,前者ではMyClassLibrary1を探す場所が変化し, 後者ではすべてのアセンブリについて,.exeと同じディレクトリ以外の場所も探すようになります。 どちらの方法も,.exeと同じディレクトリ以下のみを探せることに注意してください。 なお,ライブラリに厳密名を付けていれば,a.の方法を使うことで,どこにでも置くことができます。 <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="MyClassLibrary1" culture="neutral" publicKeyToken="a1238fd2b18ca30e" /> <codeBase version="1.0.0.0" href="file://localhost/C:/MyClassLibrary1/MyClassLibrary1/bin/Release/MyClassLibrary1.dll" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration> MSDN: 厳密な名前付きアセンブリ http://msdn.microsoft.com/ja-jp/library/wd40t7ad.aspx MSDN: 方法 : アセンブリに署名する (Visual Studio) http://msdn.microsoft.com/ja-jp/library/ms247123.aspx

wumeda
質問者

お礼

度々面倒なことをお願いしたにも関らず、辛抱強くご丁寧な回答を頂きまして、心底、感謝いたしております。お陰様で見通しが付き気持ちがすっかり前向きになることができました。本当にありがとうございました。 お教え頂いた手続きをすぐに応用するには、私には難しすぎて時間が掛かりそうなので、今回頂いた回答を理解するための勉強を続けるすることにして、当面は先に頂いたコピー方法で進めて参りたいと考えております。そして理解が進みましてから再度、今回教えていただいた手法を応用して完成させる所存です。その節は又お世話になるかも知れませんが、どうかよろしくお願い申し上げます。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

/libはコンパイルにアセンブリを検索する場所を指定するものであって,実行時には全く別の方法でアセンブリが検索されます。 アプリケーション構成ファイル (app.config) まわりの話がわからないのであれば,とりあえず, 「.NET Frameworkに標準で含まれない全ての.dllは.exeと同じディレクトリにおく」 と思ってください。 一般的にはこの認識で十分です。 結論としては,MyClassLibrary1.dllと実行アセンブリを同一ディレクトリにおくようにしてください。 これで実行できるようになるはずです。

wumeda
質問者

補足

質問者の私の無知にも関らず、優しく即答を頂くことができ、まことにありがたく感謝いたしております。 お教え頂きました「取敢えず対策」(MyClassLibrary1.dllを実行アセンブリと同一ディレクトリにコピーする方法)で、実行してみました。結果は上々で、目的プログラムが問題なく起動し、意図通りに動作することが確認できました。ありがとうございました。 ところで直接参照できる方法は難しいのでしょうか? 出来れば直接参照で実施してみたいと願っているのですが私には無理でしょうか? もしそうでなければ、お忙しいのに無理な注文ばかり申し上げて申し訳ありませんが、コマンドシンタックスを教えて頂けないでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

アセンブリの検索位置に,MyClassLibrary1.dllは存在しますか。 MSDN: ランタイムがアセンブリを検索する方法 http://msdn.microsoft.com/ja-jp/library/yx7xezcf.aspx Visual Studioは参照設定されていて,ローカルコピーがTrueのアセンブリをアセンブリをビルドした先へコピーしますが, コマンドラインからビルドした場合はそれはおこなわれません。 このため,アプリケーション構成ファイルのdependencyAssemblyやprobingが適切に設定されていない場合,システムはアセンブリを見つけることができません。

wumeda
質問者

補足

早速のご回答を頂きまして誠にありがとうございます。 確かにMyClassLibrary1.dllは「/r:以下」で指定した場所に存在しております。ご指摘を頂きました「コマンドラインからビルド時に必要なアプリケーション構成ファイルのdependencyAssemblyやprobingが適切に設定されていない場合」については、私には初めてお聞きすることであり、具体的にどのように設定すれば良いのか判らず途方にくれております。お忙しいところ誠に申し訳ありませんが、その方法を教えて頂けないでしょうか? 更に申し訳ないのですが、添付頂きましたURLにアクセスして読んでみましても、良く理解できないでおります。どうかよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Javaプログラムの実行時エラー

     Javaの学習をしている初心者です 今までメモ帳でコーディングしてコマンドプロンプトでコンパイル・実行していましたが、本日も同様のことをしていたところ、実行を要求するとException in thread "main" java.lang.NoClassDefFoundError: なるエラーが出ました。 このエラーはコーディング時のクラス名とファイル登録時のクラス名が異なる場合に出ていたような気がします。 今回は今まで作成したプログラム全部で、実行するとこのエラーが出ます。新しく作成したものもだめです。…コンパイルは うまくいきますが、実行するとこのエラーが出ます。  どうしたらよいかどなたかお教えください。

  • 実行時に出るエラーの意味が解りません

    Javaで、「SystemFont 」というクラス名をつけて プログラムを組み、コンパイルしてその後実行したところ Exception in thread "main" java.lang. NoClassDefFoundError:SystemFont というエラーが表示されるだけで実行できません。 このエラーの示す意味をどなたか教えて頂けませんか?

    • ベストアンサー
    • Java
  • Java、実行時にエラーになります。

    class test14 { public static void main(string args[]) { byte b; int i = 258; b = (byte)i; System.out.println(b); //2を表示する } } C:\WORK>javac test14.java C:\WORK>java test14 エラー: メイン・クラスtest14を検出およびロードできませんでした 原因: java.lang.ClassNotFoundException: test14 いつも教えてもらってばかりですいません。 上記のプログラム、コンパイル出来ましたが 実行時、エラーになります。 どうしてでしょうか? 教えてください。 ご回答のほど宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • C++でのエラーメッセージの意味

    C:\Program Files\Microsoft Visual Studio\MyProjects\hello\hello.cpp(73) : error C2562: 'main' : 関数は 'void' 型として宣言されていますが、値を返しました。 C:\Program Files\Microsoft Visual Studio\MyProjects\hello\hello.cpp(6) : 'main' の宣言を確認してください。 cl.exe の実行エラー hello.exe - エラー 1、警告 0 ************************** C++で、コンパイルしたら、上記のエラーメッセージが表示されました。 考えられるエラーは何でしょうか? どのように直したらよいでしょうか? どうかお教えください。

  • ファイル実行時エラーがでる・・・(^^;)。

    JAVA超初心者です。初級者向けの本を見て、プログラムの勉強を始めてみました。コンパイルをするためのパスの設定はうまくいきました。Cドライブ直下に「java」フォルダを作りそこにファイル名「Hello.java」として保存しました。そのクラスファイル「Hello.java」をコマンドプロンプト上でC:\java>に続き「java Hello」と入力して、実行しようとすると、下記のエラーが出て困っています。Exception in thread "main"java.lang.NoClassDefFoundError:Hello です。解説本を見ると、環境変数の「CLASSPATH」の設定に関して問題があるようで、カレントディレクトリをあらわす「.」を追加すればいいというのですが、私にとって「.」って何?どこにどうつけるのか具体的手順がよく説明されておらず、意味不明です。 使用OSはWinXPなのですが、何をどうすればエラーに対処できるのか、プログラムが問題なく、実行できるのか、知りたいのです。ちなみに「JDK5.0(jdk-1_5_0-windows-i586)」を使用しております。保存場所は、「c:\Program Files\Java\」内です。どうかよろしくお願いします。

    • ベストアンサー
    • Java
  • 実行結果をコマンドライン引数として渡す方法について

    test1.cはコマンドラインから引数をとり処理するプログラム test2.cは「Hello!」と出力するプログラム。 これらのプログラムをコンパイルして、次のような引数の渡し方をしてHello!と表示したいのですがうまくいきません。 実際の結果 ----------------------------------------- $ ./test1.exe ./test2.exe ($はプロンプト) $ ./test2.exe $ ----------------------------------------- 期待する結果 ----------------------------------------- $ ./test1.exe ./test2.exe $ Hello! $ ----------------------------------------- ここでプログラムの仕様を示しておきます。 プログラム1(test1.c)の中身 -------------------------------------- #include <stdio.h> main(int argc, char *argv[]){ printf("%s\n", argv[1]); } -------------------------------------- プログラム2(test2.c)の中身 -------------------------------------- #include <stdio.h> main(){printf("Hello!\n");} -------------------------------------- よろしくお願いします!

  • このエラーの意味は何でしょうか・・

    XP Pro VisualStudio2005Professional 何時からか、C++を含むヘッダをインクルードすると、以下のようなエラーが大量に出るようになったのですが、 1>c:\program files\microsoft visual studio 8\vc\include\cstdio(25) : error C2143: 構文エラー : '{' が ':' の前にありません。 どうしたらいいのでしょうか・・。

  • Borland C++でDLL作成

    こんにちは。 Borland C++でC++を始めて2日目なのですが、質問させてください。 メモ帳のエディタを使って簡単なプログラムを作成してコマンドプロンプトからコンパイルしています。 質問は、DLLとOCXを作成したいのですが、可能でしょうか? 作成手順がさっぱりわからなくて、参考になるサイト等を教えていただきたいです。 よろしくお願い致します。

  • VBで作成したパッケージを実行すると実行時エラー'429'が発生してしまいます。

    VBにてcsvファイルのデータをOracleデータベースにinsert、updateするプログラムを作成し、開発パソコンにて正常に動作することを確認しました。 開発パソコン ・Windows2000 Server(SP3) ・Visual Basic 6.0 Enterprise Edition ・Oracle 9i 本番パソコン ・Windows2000 Server(SP3) ・Oracle 9i テストパソコン ・Windows2000 Professional(SP1) 今、上記のように3台のパソコンがあります。 開発パソコンで開発したVBのプログラムをコンパイルしてexeを作成し、開発パソコン上から開発パソコン上のオラクルに対してプログラムを実行すると正常に動作します。 本番パソコンには、Visual Basicをインストールしていないため、プログラムを実行できるようにするには開発パソコンにてディストリビューションウィザードを使ってセットアッププログラムを作成し、本番パソコンにインストールする必要があると思います(質問1.ここまでは正しいですよね??)。 そこでウィザードに沿ってセットアッププログラムを作成し、まずはテストパソコンにてインストール後に実行してみたのですが、エラーが出てしまいました。 「実行時エラー'429' ActiveX コンポーネントはオブジェクトを作成できません。」 質問2.どうすればエラーが発生することなくプログラムを実行できるようになるでしょうか? テストパソコンにオラクルクライアントが必要?それとも何かDLLの更新などが必要? もしおわかりの方いらっしゃいましたら教えて下さい。 よろしくお願いします。

  • javaでメインクラスが見つからないエラーが出てしまいます。

    javaでメインクラスが見つからないエラーが出てしまいます。 やさしい簡単なプログラム class test { public static void main(String[] args) { System.out.println("Viva!"); } } をjavacでクラスファイルを作った後に(ここまではできます)java test.class を行うと could not find the main class というエラーが出てしまいます。 教科書の通りにjdkをインストールして、パスを環境変数に通して、コマンドプロンプトでコンパイルしかしていません。 なにが悪いんでしょうか?

    • ベストアンサー
    • Java