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

Unexpected Refactoring when adding service reference in Visual Studio 2012 for Windows Desktop

在一个早期的项目中,我在Visual Studio C# 2010 中添加了一个服务引用,而Studio 生成的代码是这样的(第三方Web 服务可能是用WCF 创建的):

System.Guid ServiceFunctionName(out string fileName, out int fileSize, System.Guid fileGuid, bool zip);

上面的代码与服务第三方供应商文档中也出现的函数声明相匹配。

现在,对于一个不同的项目,我在一个新的应用程序中添加了完全相同的服务引用,这次是在 Visual Studio 2012 年,并且生成的代码已被重构为一个响应对象,其中包含原始 return 类型和两个 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;
}

在重构函数附近的生成代码中也有此注释,这有点有意义,因为有问题的函数 returns 3 个值:

    // CODEGEN: Generating message contract since the operation has multiple return values.

为什么我在 VS 2010 和 VS 2012 中得到不同的函数声明?

我可以通过 Visual Studio 2012 中针对 Windows 桌面的一些设置来控制这些吗? (我对调整生成的代码有点不安)

我终于弄清楚服务引用函数声明的差异是由解决方案的目标 .NET 引起的。

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