1

work.dll を呼び出すテスト クラスを含む that.dll のロードに問題があります。

helloworld.dll を使用してうまく実行できますが、helloworld テストを test.dll に入れると、work.dll 参照を test.dll から削除した後でもロードできません。

彼女の問題は、work.dll へのパスが Fitness によって認識されていないことだと思います。どのように指定すればよいですか? (できればルートページで)

私が得るエラーメッセージは次のとおりです。

System.BadImageFormatException: Could not load file or assembly 'file:///C:\Projects\..\test.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format.
File name: 'file:///C:\Projects\..\test.dll'
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)
   at System.Reflection.Assembly.LoadFrom(String assemblyFile)
   at fitSharp.Machine.Engine.CurrentDomain.LoadAssembly(String assemblyPath)
   at fitSharp.Machine.Engine.ApplicationUnderTest.Assemblies.AddAssembly(String assemblyName)
   at fitSharp.Machine.Engine.ApplicationUnderTest.AddAssemblies(IEnumerable`1 assemblyNames)
   at fitnesse.fitserver.FitServer.ParseCommandLineArguments(IEnumerable`1 args)
   at fitnesse.fitserver.FitServer.Run(IList`1 CommandLineArguments)
   at fitnesse.fitserver.FitServer.Run(IList`1 commandLineArguments, Memory memory, ProgressReporter reporter)
   at fitSharp.Machine.Application.Shell.Run()
   at fitSharp.Machine.Application.Shell.Execute()
   at fitSharp.Machine.Application.Shell.Run(IList`1 commandLineArguments)

=== Pre-bind state information ===
LOG: User = kenneth
LOG: Where-ref bind. Location = C:\Projects\..\test.dll
LOG: Appbase = file:///C:/Projects/fitnesse/dotnet2/
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: Using application configuration file: C:\Projects\fitnesse\dotnet2\Runner.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Attempting download of new URL file:///C:/Projects/../test.dll.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.

誰にも手がかり/ヒントがありますか。

ありがとうケネス

4

4 に答える 4

3

アプリケーションのプロセスのビット数に一致する DLL のみをロードできます。これBadImageFormatExceptionは、互換性のない DLL を読み込もうとしたことを が伝えようとしていることです。

したがって、32 ビット (x86) プロセスを使用している場合は、32 ビット (x86) DLL のみをロードできます。
また、64 ビット (x64) プロセスを使用している場合は、64 ビット (x64) DLL のみをロードできます。

「任意の CPU」コンパイラ設定は、プロセスのビット数がマシンのネイティブ ビット数 (64 ビット OS では 64 ビット、それ以外の場合は 32 ビット) と一致することを意味します。

アプリケーションのビット数に一致するバージョンの DLL を入手するか、別のビット数を対象とするようにアプリケーションを再コンパイルする必要があります。

于 2013-07-23T09:56:58.047 に答える
1

問題は、64 ビットのテストランナーを実行し、32 ビットの dll をテスト/ロードすることでした。これを解決するために、/32BIT+ フラグを設定して TestRunner.exe で CorFlags.exe を実行しました。SDK から Corflags を取得できます。

于 2013-07-26T07:32:28.103 に答える
0

コードをクラスパスに追加するための FitSharp の手順を確認しましたか?

于 2013-07-19T16:27:18.523 に答える
0

BadImageFormatException に基づいて、DLL の .net バージョンとテスト ランナーの .net バージョンが一致していないようです。

于 2013-07-19T16:41:52.157 に答える