Может кто-нибудь объяснить, почему я получаю исключение TypeLoad при использовании библиотеки чисел MathNet.com? - PullRequest
3 голосов
/ 23 ноября 2011

Я получаю странное исключение System.Action TypeLoadException при умножении двух матриц. Может кто-нибудь помочь?

Я создал новый проект в VS2008, 32-разрядный, и изменил целевую среду на 2.0, включил MathNet.Numerics.dll и выполнил следующий код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Numerics;
using MathNet.Numerics.Statistics;
using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Factorization;

namespace MathNetTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            double[,] A = new double[3, 3];

            A[0, 0] = 1;
            A[0, 1] = 0.2;
            A[0, 2] = 1;
            A[1, 0] = 1.5;
            A[1, 1] = -1.2;
            A[1, 2] = 1.1;
            A[2, 0] = 0.45;
            A[2, 1] = 2.1;
            A[2, 2] = -0.76;

            Matrix XA = new DenseMatrix(A);
            Matrix XB = new DenseMatrix(A);

            Matrix C = (Matrix)(XA * XB); // throws a TypeLoadException 
        }
    }
}

1 Ответ

2 голосов
/ 23 ноября 2011

Обновление

Для MathNet.Numerics требуется .NET Framework # 4.0 для Поддержка System.Numerics .

IУ меня нет такой проблемы в Mono / MS.NET # 4.0 (см. примеры ниже)

Это с библиотеками, загруженными из google code

Если мой ответ непомочь вам, проверьте наличие конфликтующих версий MathNet в GAC и, предпочтительно, установите ссылки t

  • Копировать Local = true
  • Sepcific Version = true

Mono 2.10.x:

Минимальная программа tetst (консольное приложение):

using MathNet.Numerics.LinearAlgebra.Double;

public class Program
{
    public static void Main(string[] args)
    {
        double[,] A = new double[3, 3];

        A[0, 0] = 1;
        A[0, 1] = 0.2;
        A[0, 2] = 1;
        A[1, 0] = 1.5;
        A[1, 1] = -1.2;
        A[1, 2] = 1.1;
        A[2, 0] = 0.45;
        A[2, 1] = 2.1;
        A[2, 2] = -0.76;

        Matrix XA = new DenseMatrix(A);
        Matrix XB = new DenseMatrix(A);

        Matrix C = (Matrix)(XA * XB); // throws a TypeLoadException 
    }
}

Скомпилировано с

dmcs -optimize+ -reference:MathNet.Numerics.dll test.cs

Работает нормально

Win64 MS.NET 4.0:

Обновление Также нет проблем на VS2010 (WinXP 64):

T:\lib\Net40>csc test.cs -reference:MathNet.Numerics.dll
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.


T:\lib\Net40>.\test.exe
...