在Visual Studio 2012中为Windows桌面添加服务引用时发生意外的重构

p

在一个较早的项目中,我在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中的某些设置来控制这些吗?(对于调整生成的代码我有些不安)

p

我最终发现服务引用函数声明中的差异是由解决方案的目标.NET引起的。

在一种情况下(VS 2010 C#),目标是.NET 4.0,而在另一种情况下(VS 2012 C#),目标是.NET 4.5。在以.NET 4.0为目标再次添加VS 2012解决方案服务引用之后,函数声明与VS 2010 C#中的相同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章