2

我有一个 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 并且一切都变得很糟糕吗?

谢谢!

4

2 回答 2

4

你可以使用条件注释吗?

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

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

<DefineConstants>TESTING</DefineConstants>
于 2008-11-17T17:06:51.340 回答
3

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

您还可以编写自定义构建任务 -> Target BeforeBuild,然后在 Project 对象中使用 Engine.GlobalEngine.GetLoadedProject("projpath")。

现在,您可以根据不同的环境来操作 Project 对象的属性。

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

这可能不是您正在寻找的答案,但是当您想要基于项目环境进行 fork 构建时需要考虑的问题。

于 2008-11-17T17:13:51.983 回答