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

本文关键字:属性 问题 遇到 整数 null 为什么 | 更新日期: 2023-09-27 18:00:09

我对一段现有的.NET 4代码进行了修改,以生成一个由可为null的整数组成的新属性。它在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

这就好像代码没有正确部署,或者就是找不到自动获取/设置方法。一位同事做了一个后续的更改,在我们的测试环境中确实有效,所以我不认为这是部署问题。

我想不出会发生这种情况的任何原因,除了Windows Server(2008 R2)的操作可能与我开发的Windows 7不同之外,但这是一个延伸。

以前有人见过这个吗?

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

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

我会在Reflector中打开Assembly,然后真的确保方法在那里。

正如@Aasmund提到的,这可能是一个过时的程序集。你提到它在Windows服务中,你是否在部署后尝试重新启动该服务?

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