5
votes

Erreur C # Unity: impossible de charger le fichier ou l'assembly

J'ai trouvé cet article de démonstration sur Unity. Cela semble assez simple mais j'obtiens l'erreur suivante:

Impossible de charger le fichier ou l'assemblage 'System.Runtime.CompilerServices.Unsafe, Version = 4.0.4.1, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a 'ou l'un de ses dépendances. La définition de manifeste de l'assembly localisé ne correspond à la référence d'assemblage. (Exception de HRESULT: 0x80131040)

https: //www.tutorialsteacher. com / ioc / register-and-resolution-in-unity-container

using System;
using Unity;

namespace UnityContainerDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var container = new UnityContainer();
            container.RegisterType<ICar, BMW>();// Map ICar with BMW 

            //Resolves dependencies and returns Driver object 
            Driver drv = container.Resolve<Driver>();
            drv.RunCar();
        }
    }

    public interface ICar
    {
        int Run();
    }

    public class BMW : ICar
    {
        private int _miles = 0;

        public int Run()
        {
            return ++_miles;
        }
    }

    public class Ford : ICar
    {
        private int _miles = 0;

        public int Run()
        {
            return ++_miles;
        }
    }

    public class Audi : ICar
    {
        private int _miles = 0;

        public int Run()
        {
            return ++_miles;
        }

    }
    public class Driver
    {
        private ICar _car = null;

        public Driver(ICar car)
        {
            _car = car;
        }

        public void RunCar()
        {
            Console.WriteLine("Running {0} - {1} mile ", _car.GetType().Name, _car.Run());
        }
    }
}


0 commentaires

3 Réponses :


3
votes

Lorsque j'ai tenté de dupliquer le problème, l'erreur a disparu après avoir exécuté une mise à jour NuGet pour System.Runtime.CompilerServices.Unsafe .


2 commentaires

Avez-vous un aperçu que vous pouvez partager qui pourrait expliquer cela? J'ai lu les commentaires de Brad ci-dessous.


Cela ressemble à une nouvelle dépendance avec la dernière version d'Unity (v5.9.3) et il y a un problème de configuration avec une version du package dépendant. Si vous voulez en savoir plus, vous pouvez lire stackoverflow.com/questions/215026/… et stackoverflow.com/questions/20978519/...



7
votes

Ce qui corrige le bogue, c'est l'ajout d'une entrée dependAssembly pour l'assembly 'manquant' dans votre configuration app / web (ce qui est la magie derrière l'installation de NuGet, et devrait se produire automatiquement).

...


2 commentaires

Intéressant. Je ne manquais pas le DependantAssembly dans app.config.


Oui, je ne suis pas sûr de ce qui s'est passé dans mon cas! J'ai mis à niveau une version précédente de Unity, donc je suppose qu'il manque quelque chose dans leur stratégie de packaging lors de la migration ... mais je n'ai jamais publié de package NuGet, donc c'est juste une supposition.



0
votes

Dans mon cas, j'ai plusieurs projets dans ma solution. J'ai eu cette erreur après avoir installé Unity avec Nuget dans l'un des projets alors que j'avais Unity installé dans un autre projet. Le problème vient des différentes versions des bibliothèques de CompilerServices.Unsafe

Ce que j'ai fait, c'est de vérifier les fichiers app.config et packcages.config (en particulier celui-ci) pour tous les projets avec Unity installé. La version devrait être la même pour tous. Dans mon cas:

<packages>
  <package id="System.Runtime.CompilerServices.Unsafe" version="4.7.0" targetFramework="net48" />
  <package id="Unity" version="5.11.2" targetFramework="net48" />
</packages>

Un projet était avec 4.7.0 et l'autre avec 4.5 J'ai mis à jour la dernière version et j'ai résolu.

Vous pouvez également faire un clic droit sur Solution - Gérer les packages Nuget pour la solution et installer un package en sélectionnant quels projets auront ce package en une seule étape.


0 commentaires