首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSBuild条件编译

MSBuild条件编译
EN

Stack Overflow用户
提问于 2008-11-17 16:54:16
回答 2查看 2K关注 0票数 2

我有一个web服务类,框架的其他部分依赖它来获取其数据,但是web服务类需要有不同的方法属性,这取决于它所处的环境。比如说..。

代码语言:javascript
复制
[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")。是做it?
  • Considering的唯一方法

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-11-17 17:06:51

你能用条件注释吗?

代码语言:javascript
复制
#if TESTING
        [SoapDocumentMethodAttribute(something)]
#else
        [SoapDocumentMethodAttribute(someotherthing)]
#endif

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

代码语言:javascript
复制
<DefineConstants>TESTING</DefineConstants>
票数 4
EN

Stack Overflow用户

发布于 2008-11-17 17:13:51

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

您还可以编写自定义生成任务( Engine.GlobalEngine.GetLoadedProject("projpath") -> BeforeBuild ),然后将该BeforeBuild使用到Project。

现在,您可以对Project对象上的属性进行操作,无论您希望如何处理不同的环境。

考虑在配置中添加平台,如果需要的话,可以针对不同的环境添加。

这可能不是您想要的答案,但当您想要基于项目环境进行分叉构建时,需要考虑一些问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/296147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档