
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ランキング
-
DLLファイルの逆コンパイラにつ...
-
プログラマー達は何故、プログ...
-
C#でTreeViewのCheckBoxのサイ...
-
visual studio 2022でのC#プロ...
-
略語の読み方について
-
c言語
-
C言語の関数のextern宣言
-
【C言語】全角文字の配列を、全...
-
最初に聞かれたこと
-
C言語 関数、変数の宣言について
-
あってる
-
C言語のことです。写真(見にく...
-
プログラミング言語についてc++...
-
UART通信の取説で,left floati...
-
パソコン
-
gccを行ってもexeファイルが生...
-
VisualStudio2022でC言語プログ...
-
C++でデスクトップGUIアプリ開...
-
C言語について。
-
C言語 解答について。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
delphi6trialで読み込み違反エラー
-
「Now Loading」の表示
-
FLASHについて
-
MovieClipLoaderってテキストは...
-
C#でDLLファイル読み込みを行う...
-
aspで別ドメインにあるXMLの読...
-
PIC EEPROM
-
for文について
-
DVD(ROM)DLの読み込み速度
-
DVD-RAMの読み込み
-
再読み込みが可能なPDFビューワ...
-
ニコニコ動画のある映像をクリ...
-
UNIXでのファイル操作の方法
-
Now Loading又は同じ動作を必ず...
-
GetPrivateProfileString変値
-
onPressに関する質問
-
FLASH8 外部テキストファイル...
-
[C#]webbrowserのstop()について
-
ループ処理について
-
外部ファイルからのデータの読...
おすすめ情報