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

C# 为什么我在将可为空的整数作为属性时遇到问题?,c#,asp.net,.net-4.0,properties,nullable,C#,Asp.net,.net 4.0,Properties,Nullable,我对一段现有的.NET4代码进行了修改,以生成一个由可为空的整数组成的新属性。它在Windows服务中运行 public static int? Port { get; set; } 其概念是,如果该值为null,则忽略该值,但如果不是null,则使用该值(非默认场景) 在我的机器上,它按预期工作 然而,当部署到我们的测试服务器时,当从ASP.NET站点调用它时,我会遇到异常。以下是格式化的异常输出: Exception: System.

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

    public static int? Port
    {
        get;
        set;
    }
其概念是,如果该值为null,则忽略该值,但如果不是null,则使用该值(非默认场景)

在我的机器上,它按预期工作

然而,当部署到我们的测试服务器时,当从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
异常:System.MissingMethodException 异常消息:找不到方法:“Void NameOfAssembly.set_Port(System.Nullable`1)”。 异常数据:System.Collections.ListDictionaryInternal 异常TargetSite:*无法获取值** 异常帮助链接:NULL 这就好像要么代码没有正确部署,要么就是找不到自动get/set方法。一位同事做了一个在我们的测试环境中起作用的后续更改,所以我认为这不是部署问题

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


以前有人见过吗?

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

听起来ASP.NET站点不知何故使用了过时的程序集版本。如果此错误发生在编译的代码中(而不是在.aspx页面中),则您可能已根据程序集的更新版本编译了它,但在部署它时没有包含更新的程序集。

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

我会在Reflector中打开程序集,并确保该方法存在

但我不认为这是真正的问题;这更多的是风格问题。使用
端口!=空值是完全合法的。虽然这种风格没有什么问题(或者与null相比,它们都编译为相同的代码),但这根本不能解决这个问题,作为对原始问题的评论,这种回答会更好。我可能没有很好地表达它,但所讨论的代码位于从ASP.NET页面调用的Windows服务中。由于其他人对代码的后续更改工作正常,我不认为这是一个过时程序集的问题,但我不排除它。ASP.NET页面如何调用该服务?错误是在服务中还是在页面中发生的?@Aasmund:在服务中,但异常会出现在ASP.NET页面上并记录在那里。@是的,但是您使用什么方法来获取对作为服务的程序集的引用?如果您使用的是反射,请检查服务器上的gac,其中可能有一个过时的程序集,这正是您的程序集所连接的。@John Yeah我们调查过,它不在gac中(尽管早期版本是),但即使我们从gac中删除了所有内容,问题仍然存在。我可能仍然缺少一些东西,但我不知道还有什么可以尝试。是的,服务已停止、部署,然后重新启动。随后的更改是有效的,所以我认为代码已经部署好了,但不排除某些东西已经交叉连接的可能性。
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