MSBuild条件编译

我有一个Web服务类,框架的其余部分依赖于获取其数据,但Web服务类需要具有不同的方法属性,具体取决于它所处的环境。例如……

[SoapDocumentMethodAttribute("https://example",...)] public string Test() { //doSomething } 

看到“ https:// example ”? 这需要根据环境而改变。 AFAIK你不能让那个字符串为运行时动态,它必须以这种方式编译。 所以我试图得到它,以便我有这个Web服务的多个CS文件,其中有不同的属性URL硬编码,并且MSBuild在预编译时交换它们。 所以我有一个基础“Service.cs”用于测试,“Service.cs.production”用于生产环境,等等。

  • 这是最好的方法吗,或者我错过了一些我可以拥有一个CS来处理环境的东西?
  • 为了保持具有相同的类名和IntelliSense不认为事情是模棱两可的,我正在弄乱文件扩展名(“Service.cs”与“Service.cs.production”)。 这是唯一的方法吗?
  • 考虑到上述所有情况都可以,并且我正在编译“生产”配置,它可以编译Service.cs.production 而不是 Service.cs,一切都变得很糟糕吗?

谢谢!

你能用条件评论吗?

 #if TESTING [SoapDocumentMethodAttribute(something)] #else [SoapDocumentMethodAttribute(someotherthing)] #endif 

对于测试配置,您将定义常量:

 TESTING 

结合定义常量,并使用#if指令,

您还可以编写自定义生成任务 – > Target BeforeBuild,然后将Engine.GlobalEngine.GetLoadedProject(“projpath”)编写到Project对象中。

现在,您可以根据需要操作Project对象上的属性以适应不同的环境。

如果您愿意,可以考虑在配置中添加平台,以用于不同的环境。

这可能不是您正在寻找的答案,但是当您想要根据项目环境进行分叉构建时需要考虑的事项。