C#のMsTestで同ソリューション内にUnitTestプロジェクトを作成し、単体テストの準備を進めています。
環境はVisualStudio2015 Professionalになります。
<質問内容>
DLLファイルの動的読み込みを行うテスト対象関数を実行すると、FileNotFoundExceptionが発生し、失敗します。
読み込み方が間違っているのか、DLLファイルの格納場所が間違っているのかもわからず、悩んでおります。
どうすれば正常に動作させることができるのかをご教授頂きたいです。
<DLL読み込み方法>
読み込みにはAppDomainクラスのCreateInstanceAndUnwrap関数を使用します。
例)
<テスト対象プロジェクト・クラス・関数>
●ソース
public class main{
string readData;
public void read(){
AppDomain appDomain = AppDomain.CreateDomain("readDomain");
readClass instance = appDomain.CreateInstanceAndUnwrap("readDLL" , "readDLL.readClass");
readData = instance.read();
AppDomain.Unload(appDomain);
}
}
<DLL読み込み先プロジェクト・クラス・関数>
●アセンブリ名:readDLL
●ソース
namespace readDLL{
public class readClass : MarshalByRefObject{
public string read(){
ファイル読み込み処理
return 読み込みデータ
}
}
}
CreateInstanceAndUnwrap関数の引数(アセンブリ名,完全修飾子)は合っているつもりでいます。
「readDLL.dll」はmainクラス側のプロジェクトフォルダとユニットテストプロジェクトフォルダの\bin\Debugフォルダにも格納しています。
また、System.Reflection.Assembly.GetExecutingAssembly().LocationでAssemblyのフォルダを見てみましたが、ユニットテストプロジェクトフォルダでした。
お手数おかけしますが、ご教授の程、お願いいたします。
No.3ベストアンサー
- 回答日時:
私もやったことがなかったので分からなかったのですが、UnitTest起因では、そもそも走行しているルートディレクトリはvstesthost.exeがあるところだから、まずルートディレクトリを設定しなければならない、だそうです。
https://social.msdn.microsoft.com/Forums/en-US/2 …
ページの最後にDavid Gorena Elizondoが提案しているコードで解決するようです。
でも、このコード自体をユニットテストするなら、その作りにしてあげないといけないので、うーんって感じですね。
いくつかキーワードは確定したので、調べると、いい解決方法を見出している人もいるかもしれません。
No.2
- 回答日時:
アセンブリ名とは、例えば
ConsoleApp1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
という記述かと思いますが。
すみません。言葉足らずでした。
先のお礼に記載したFullNameプロパティが、今回記載頂いた形式のものとなりました。
現在、いくつか実験を試みたところ、フォームプロジェクトを作り、exe格納フォルダにそれぞれのDllファイルを格納し、フォームプロジェクトからmainクラスのread関数を読んでみたところ、正常に動作しました。
この結果から鑑みて、MsTestのUnitTestプロジェクトはアプリではないから、AppDomainが成立せず、実行できないのだろうか?と考えているところです。
そうである場合、どうしたものかと検討中になります。
No.1
- 回答日時:
ご回答ありがとうございます。
assemblyName、typeNameともにreadDLL側でFullNameプロパティからとってきたものを入れてもみたのですが、同様にFileNotFoundExceptionとなります。
メッセージとしては「相対パスに誤りが・・・」というようなメッセージが出るものの、この関数ではパス指定行う例も見受けられなかったため、この関数の引数でパス指定はないものと考えております。
以前フォームプロジェクトから外部DLLをCreateInstanceAndUnwrap関数で読み込む際は、App.configのprodingタグのprivatePath属性に参照先相対パスを記載して動かし、正常に動作したことは確認できております。
今回も最終的にはアプリがmainクラスのDLLを読み込み、同様にApp.configで対処する予定ではいるのですが、現状は単体テストでmainクラスのread関数を対象に正常動作確認を取りたい、という点からユニットテストプロジェクトでテストコードを組んでいるものの、ユニットテストプロジェクトではApp.configもなく、どうすれば読み込めるのかという点がわからず困っている次第であります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- C言語・C++・C# pythonで外部のファイルを読み込む際のエラー 2 2022/04/12 19:22
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語階乗の総和を求める
-
Python、プログラミングについ...
-
c++でテンプレートのコードでわ...
-
gccを行ってもexeファイルが生...
-
c言語
-
プログラム内から、MIDIファイ...
-
win10で、正確な待ち時間の作り方
-
応用情報技術者試験の令和元年...
-
大量のデータを読み込んで表示...
-
右ビットシフト
-
C言語 配列と関数の練習問題
-
gcc13.2のバグ?
-
C言語 入力した値から0までの数...
-
C言語 コマンドプロンプトにつ...
-
プログラミングの課題がわから...
-
なんで
-
バッチファイルで以下のような...
-
インクリメント演算子のみを用...
-
プログラミングについて。 1つ...
-
double型が正常に認識されてい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 バッファについて。
-
GetPrivateProfileString変値
-
カメラ画像 その他のエラー(0...
-
WebBrowserでgoogle検索するには?
-
C#でDLLファイル読み込みを行う...
-
外部swfファイルを予め読み込ん...
-
メモリに読み込んだ音源のPlayS...
-
外部ファイルからのデータの読...
-
ヤフオクの画像拡大機能が
-
動画ファイルから画像ファイル...
-
外部flvファイルの再生終了の確...
-
外部画像と音楽(MP3)の取り入れ方
-
パソコンWindows10 電源入れた...
-
外部テキストのURLを読み込みたい
-
パブリッシュ設定でflash playe...
-
ipadでdブックがとんでもなく遅...
-
loadVariablesで読み込んだら文...
-
Now loadingの表示
-
ハードディスク DVD 読み...
-
空の音楽用CDーRだけが認識...
おすすめ情報