为什么我在将可为空的整数作为属性时遇到问题?

时间:2011-06-22 21:33:36

标签: c# asp.net .net-4.0 properties nullable

我对现有的.NET 4代码进行了修改,以创建一个由可以为空的整数组成的新属性。它在Windows服务中运行。

    public static int? Port
    {
        get;
        set;
    }

这个概念是,如果值为null,则会被忽略,但如果不是,则使用它(非默认方案)

    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 个答案:

答案 0 :(得分:5)

听起来像ASP.NET网站以某种方式使用过时的程序集版本。如果在编译的代码中(而不是在.aspx页面中)发生此错误,则可能已根据程序集的更新版本对其进行编译,但在不包括更新的程序集的情况下对其进行了部署。

答案 1 :(得分:1)

我会在Reflector中打开Assembly,确实确保方法在那里。

答案 2 :(得分:0)

@Aasmund提到它可能是一个过时的装配。你提到它在Windows服务中,你是否尝试在部署后重新启动服务?

答案 3 :(得分:-1)

我认为你应该使用if(Port.HasValue)而不是if(Port!= null)