我希望有人能指出我正确的方向。我有一个方法(A),它返回通过反射(B)调用的另一个方法的结果。 A返回一种Object类型,但是用(B)调用的方法返回一个字符串。
当我在本地运行我的应用程序时,执行:
object x = A();
string y = x.GetType().ToString();
'y'的值是预期的System.String。当我在生产中运行这个完全相同的代码时(是的,它是完全相同的代码/库/可执行文件/等等。我没有留下来证明它:)),'y'是System.Object。这最终导致下游错误。
有人能告诉我导致这种差异的原因吗?本地我正在运行Windows 7 Professional的物理副本。在生产中,我正在运行虚拟化的Windows Server 2008 Standard。此应用程序是用.NET 3.5编写的。方法A和B是一个VB.NET库。调用应用程序是用C#编写的。
答案 0 :(得分:1)
不是很明显,但它必须是相同的代码。如果它是相同的代码,它很可能会有相同的结果。
您是否正在使用VB.NET库的源代码?如果你这样做,因为你有源它调用方法的源,所以它可以自动推断出类型,而使用'production'版本,它不能推断出类型,因为它是从一个程序集或其他东西调用。 / p>
有一个简单的解决方法:
object x = A();
object xCasted = x as string;
if(x == null) ; //you have issues
答案 1 :(得分:0)
感谢您的帮助。我已经解决了这个问题。事实证明,返回生产环境的System.Object是准确的。 A调用的方法使用ByRef Object变量,变量设置为字符串并返回。
当该变量在生产中设置时,异常被抛出并被吞噬。当方法完成执行时,ByRef从未被赋予字符串值,因此仍然是System.Object。
谢谢