8

F# を使い始めたばかりで、FSharp PowerPack の特定のメソッドを使用すると System.MissingMethodException がスローされるという非常に奇妙な問題に遭遇しています。

これは、同じモジュール内のすべてのメソッドで発生するわけではありません。また、アセンブリをクラス ライブラリではなくアプリケーションとしてコンパイルしても発生しません。

再現手順:

  1. 2 つのアセンブリ (1 つのクラス ライブラリと 1 つのアプリケーション) を作成します。
  2. nunit.framework と FSharp.PowerPack DLL を両方のアセンブリへの参照として追加します。
  3. 各アセンブリで次のテスト フィクスチャを作成します。

    open NUnit.Framework
    
    [<TestFixture>]
    type Tests() = class
    
        [<Test>]
        member self.OfSeq() =
            // Will always succeed
            Matrix.Generic.ofSeq [[1]] |> ignore
    
        [<Test>]
        member self.OfList() =
            // Will fail under certain conditions with a System.MissingMethodException
            Matrix.Generic.ofList [[1]] |> ignore
    end
    
  4. 両方のアセンブリをコンパイルします。
  5. NUnit で各アセンブリを開き、すべてのテストを実行します。

これを行うと、アプリケーションは問題なく実行されますが (すべてのテストに合格)、クラス ライブラリは次の例外で失敗します。

System.MissingMethodException : Method not found: 'Microsoft.FSharp.Math.Matrix`1<!!0> Generic.ofList(Microsoft.FSharp.Collections.FSharpList`1<Microsoft.FSharp.Collections.FSharpList`1<!!0>>)'.
   at Temp2.Tests.OfList()

ここで何が起こっているのですか?

この問題を引き起こす別の方法は、matrix.PermuteColumns です。

追加情報:

  • .NET 4.5 用に両方のアセンブリをコンパイルしています
  • Visual Studio 2012 RC を使用してコンパイルしています
  • NUnit バージョン 2.5.10.11092 を使用しています
  • FSharp PowerPack バージョン 2.1.3.1 を使用しています (ただし、DLL プロパティには 2.0.0 と記載されています)

役立つ追加情報があれば教えてください。

4

2 に答える 2

12

(このQが検索で最初にヒットしたので、今後の参考のために答えてください。)

Visual Studio 2013では、Brian が参照する「F# MSTest」オンライン プロジェクト テンプレートを使用して、Brian の提案はどちらも役に立ちませんでした (テストのターゲットは、.NET のないライブラリ プロジェクトですApp.Config)。

しかし、最終的に、テスト プロジェクトが F#3 ランタイム (FSharp.Core V4.3.0.0 を使用) を使用するように設定されていることがわかりました。これを F# v3.1 (FSharp.Core V4.3.1.0) に変更すると、問題が修正されました。

于 2013-08-27T18:38:20.347 に答える
3

これはバインディング リダイレクトに関連しているのだろうか。アプリケーション プロジェクトの app.config をライブラリ プロジェクトにコピーする必要がある場合があります。

これは、NUnit ではなく MSTest に関する F# チーム ブログ (おそらく数週間以内に表示される予定) で現在ブログ記事を書いている既知の問題に似ています。app.config をライブラリ プロジェクトにコピーしてみますが、うまくいかない場合は、ここで単体テスト用のオンライン テンプレートを使用します。

http://visualstudiogallery.msdn.microsoft.com/51ebe64a-899b-4959-8c24-b0148ed6b264

さらに、VS のメニューから 'TEST\Test Settings\Select Test Settings File' を選択し、単体テスト プロジェクト テンプレートに含まれている 'MSTest.runsettings' ファイルをポイントします。MSTest の場合、これら 2 つの調整のいずれかで修正されると思います。

于 2012-08-10T18:20:49.897 に答える