Visual Studio c#允许构建时出现错误以进行手动处理

时间:2016-03-09 08:11:20

标签: c# visual-studio wcf object

我使用了在不同客户上实现的相同第三方WCF服务的几个不同版本。我遇到了问题,因为差异我无法使用相同的代码: - 旧版本有时不包含方法的所有方法或参数 - 某些客户可能会有一些自定义属性。

示例:

我可以做这两个版本:

// configured with http://service.customer1111.com/Service1111.svc?wsdl
using(var s = new project.Service.Service1111Client()){
...
}

// configured with http://service.customer2222.com/Service2222.svc?wsdl
using(var s = new project.Service.Service2222Client()){
...
}



Member m = s.MemberGet(1, 1); // same for both 
var name = m.Name; //same for both
var age = m.AgeOfPet; // only valid on customer1111 - dosen't exist on 2222
var bmi = s.ComputeBMI(m); // method on 1111
var bmi2 = s.ComputeBMI(m, 2); // method on 2222

现在,我必须在10.000行代码中找到10个不同的位置,并注释错误的版本,以便在更改服务时能够构建项目。

我想:

Decimal bmi;
if (ConfigurationManager.AppSettings["customerID"] == "1111")    
    {
       // method on 1111 - ignore build error on others
       bmi = s.ComputeBMI(m); 
    }
    else
    {
       // method on others - ignore build error on 1111
       bmi2 = s.ComputeBMI(m, 2); 
    }

但这显然不会构建。

我正在寻找一种在某些代码块中“忽略构建错误”的方法。

差异对我的代码影响很小,否则创建和解析抽象类是一项艰巨的任务。

有什么办法可以实现吗?

1 个答案:

答案 0 :(得分:0)

您可以使用c#预处理器指令(https://msdn.microsoft.com/en-us/library/ed8yd1ha.aspx),如此

 Decimal bmi;
    #if
       bmi = s.ComputeBMI(m); 
    #else
       bmi = s2.ComputeBMI(m, 2);
    #endif