在一个较早的项目中,我在Visual Studio C#2010中添加了一个服务引用,并且Studio生成的代码是这样的(第三方Web服务可能是使用WCF创建的):
System.Guid ServiceFunctionName(out string fileName, out int fileSize, System.Guid fileGuid, bool zip);
上面的代码与功能声明相同,该声明也出现在服务第三方供应商的文档中。
现在,对于另一个项目,这次我在Visual Studio 2012中将完全相同的服务引用添加到新应用程序中,并且生成的代码已重构为具有原始返回类型和两个out
参数以及一个请求对象的响应对象。带有两个参数,它们是前一个函数声明中的输入参数:
AppNamespace.ServiceReferenceName.ServiceFunctionNameResponse ServiceFunctionName(AppNamespace.ServiceReferenceName.ServiceFunctionNameReRequest request);
public ServiceFunctionNameRequest(System.Guid fileGuid, bool zip)
{
this.fileGuid = fileGuid;
this.zip = zip;
}
public ServiceFunctionNameResponse(System.Guid ServiceFunctionNameResult, string fileName, int fileSize)
{
this.ServiceFunctionNameResult = ServiceFunctionNameResult;
this.fileName = fileName;
this.fileSize = fileSize;
}
在重构函数附近的生成代码中也有此注释,这是有道理的,因为所讨论的函数返回3个值:
// CODEGEN: Generating message contract since the operation has multiple return values.
为什么在VS 2010和VS 2012中得到不同的函数声明?
我可以使用Visual Studio 2012 for Windows Desktop中的某些设置来控制这些吗?(对于调整生成的代码我有些不安)
我最终发现服务引用函数声明中的差异是由解决方案的目标.NET引起的。
在一种情况下(VS 2010 C#),目标是.NET 4.0,而在另一种情况下(VS 2012 C#),目标是.NET 4.5。在以.NET 4.0为目标再次添加VS 2012解决方案服务引用之后,函数声明与VS 2010 C#中的相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句