2017-08-24 4 views
0

J'ai démarré un nouveau projet d'application de console VS2017 C# et ai installé Alea et Alea.Fody à partir du gestionnaire de paquets. Exécution d'un morceau de code échantillon du site Web m'a donné l'exception suivante.Alea 3.0.3 Exemple de programme C# se bloquant en référence à F # System.TypeInitializationException

System.TypeInitializationException se sont produits HResult = 0x80131534 message = Le type initialiseur pour 'Alea.GlobalImplicitMemoryTracker' a lancé une exception. Source = Alea STACKTRACE: à Alea.GlobalImplicitMemoryTracker.GetInManagedFlag() à gputest.Program.DelegateWithClosureGpu() à gputest.Program.Main (String [] args) dans c: \ Users \ myuser \ documents \ Visual Studio 2017 \ Projects \ gputest \ gputest \ Program.cs: ligne 14

exception interne 1: TypeInitializationException: l'initialiseur de type pour 'A.cf5aded17df9f7cc4c132234dda010fa7' a généré une exception.

Exception interne 2: FileNotFoundException: Impossible de charger le fichier ou l'assembly 'FSharp.Core, Version = 4.4.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' ou une de ses dépendances. Le système ne peut pas trouver le fichier spécifié.

Voici l'intégralité du programme.

using Alea; 
using Alea.Parallel; 
using System.Linq; 

namespace gputest 
{ 
class Program 
{ 
    private const int Length = 1000000; 

    static void Main(string[] args) 
    { 
     DelegateWithClosureGpu();  
    } 

    [GpuManaged] 
    public static void DelegateWithClosureGpu() 
    { 
     var arg1 = Enumerable.Range(0, Length).ToArray(); 
     var arg2 = Enumerable.Range(0, Length).ToArray(); 
     var result = new int[Length]; 

     Gpu.Default.For(0, result.Length, i => result[i] = arg1[i] + arg2[i]); 

     var expected = arg1.Zip(arg2, (x, y) => x + y); 

     //Assert.That(result, Is.EqualTo(expected)); 
    } 
} 
} 

Répondre

1

Vous devez installer F # runtime. Dans VS2015, sélectionnez votre installation vs et choisissez Modifier, ajoutez la fonction F #.

1

J'ai dû installer F # un peu différemment pour VS2017 en modifiant les options de développement de bureau .NET pour installer la prise en charge de la langue F #, mais après cela, cela a fonctionné. Il n'est pas intuitif que l'utilisation d'Alea pour C# nécessite le support de F #. Cela devrait être listé dans le guide d'installation.

1

J'ai eu une erreur similaire dans VS2017.3 avec F # déjà installé, à partir d'un projet propre, en utilisant Alea GPU 3.0.3 de NuGet. Il s'avère que le paquet contient toutes les DLL référencées, y compris le fichier FSharp.Core.dll (vérifiez le .../packages/sous-répertoire de votre projet C#). J'ai copié toutes les DLL sur le répertoire contenant l'exécutable (par exemple,/bin/Debug), décoché la propriété du programme C# pour "préférer 32 bits", et reconstruit. Mon programme s'est ensuite bien passé. Notez, je pense que le fichier .targets Alea GPU pourrait avoir besoin d'être corrigé pour copier les fichiers requis dans le répertoire approprié.