3 votes

Pourquoi ai-je un problème pour faire d'un entier nullable une propriété ?

J'ai modifié un morceau de code .NET 4 existant pour créer une nouvelle propriété composée d'un entier nullable. Il s'exécute dans un service Windows.

    public static int? Port
    {
        get;
        set;
    }

Le concept était que si la valeur était nulle, elle était ignorée, mais si elle ne l'était pas, elle était utilisée (un scénario non par défaut).

    if (Port != null)
    {
        client = new Client( Server, Port.Value );
    }
    else
    {
        client = new Client( Server );
    }

Sur ma machine, il fonctionne comme prévu.

Cependant, lorsqu'il est déployé sur nos serveurs de test, j'obtiens des exceptions lorsqu'il est appelé à partir d'un site ASP.NET. Voici la sortie formatée de l'exception :

Exception: System.MissingMethodException
Exception Message: Method not found: 'Void NameOfAssembly.set_Port(System.Nullable`1<Int32>)'.
Exception Data: System.Collections.ListDictionaryInternal
Exception TargetSite: ** Unable to GetValue **
Exception HelpLink: NULL

C'est comme si le code n'avait pas été déployé correctement ou qu'il ne trouvait pas les méthodes automatiques get/set. Un collègue a apporté une modification ultérieure qui fonctionne dans notre environnement de test, je ne pense donc pas qu'il s'agisse d'un problème de déploiement.

Je ne vois pas pourquoi cela se produirait, à part peut-être Windows Server (2008 R2) qui fonctionne différemment de Windows 7 où je l'ai développé, mais c'est un peu exagéré.

Quelqu'un a-t-il déjà vu cela ?

6voto

Aasmund Eldhuset Points 17036

Il semble que le site ASP.NET utilise une version obsolète de votre assembly. Si cette erreur se produit dans un code compilé (plutôt que dans une page .aspx), il est possible que vous l'ayez compilé avec une version mise à jour de l'assemblage, mais que vous l'ayez déployé sans inclure l'assemblage mis à jour.

1voto

aquinas Points 10517

J'ouvrirais l'assemblage dans Reflector et vraiment s'assurer que la méthode existe.

0voto

Davy8 Points 12458

Comme le mentionne @Aasmund, il s'agit probablement d'un assemblage obsolète. Vous mentionnez que c'est dans un service Windows, avez-vous essayé de redémarrer le service après le déploiement ?

-1voto

boca Points 1414

Je pense que vous devriez utiliser if(Port.HasValue) au lieu de if(Port !=null)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X