Почему у меня возникает проблема с присвоением целому числу допускаемого значения, равного нулю? - PullRequest
3 голосов
/ 23 июня 2011

Я внес изменение в существующий фрагмент кода .NET 4, чтобы создать новое свойство, состоящее из целого числа, допускающего обнуляемость.Он запускается в службе Windows.

    public static int? Port
    {
        get;
        set;
    }

Концепция заключалась в том, что если значение было нулевым, оно игнорировалось, а если нет, то использовалось (сценарий не по умолчанию)

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

На моей машине все работает как положено.

Однако при развертывании на наших серверах тестирования я получаю исключения, когда он вызывается с сайта ASP.NET.Вот отформатированный вывод исключения:

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

Это как если бы либо код был развернут неправильно, либо он просто не может найти автоматические методы get / set.Коллега сделал последующее изменение, которое работает в нашей среде тестирования, поэтому я не думаю, что это проблема развертывания.

Я не могу представить причину, по которой это могло бы произойти, за исключением, возможно, Windows Server (2008 R2), работающего не так, как Windows 7, где я его разработал, но это натянуто.когда-нибудь видел это раньше?

Ответы [ 4 ]

5 голосов
/ 23 июня 2011

Похоже, сайт ASP.NET каким-то образом использует устаревшую версию вашей сборки.Если эта ошибка возникает в скомпилированном коде (а не на странице .aspx), вы, возможно, скомпилировали ее для обновленной версии сборки, но развернули ее, не включая обновленную сборку.

1 голос
/ 23 июня 2011

Я бы открыл сборку в Reflector и действительно , чтобы убедиться, что метод есть.

0 голосов
/ 23 июня 2011

Как @Aasmund упоминает, что это, вероятно, устаревшая сборка.Вы упоминаете, что он находится в службе Windows, пытались ли вы перезапустить службу после развертывания?

0 голосов
/ 23 июня 2011

Я думаю, вы должны использовать if (Port.HasValue) вместо if (Port! = Null)

...