c# - MSBuild 条件编译

标签 c# .net 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

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

<DefineConstants>TESTING</DefineConstants>

关于c# - MSBuild 条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/296147/

相关文章:

c# - Visual Studio 2022 for Mac 中未命中断点

c# - 从函数返回错误消息的最佳方法是什么?

c# - 在没有 Entity Framework 的情况下使用 C# 进行数据库交互

visual-studio-2010 - VS2010 Web 部署 : how to remove absolute paths and automate setAcl?

asp.net - VS 2015 和 msbuild 抑制 typescript 错误

c# - 如何将选定的微调器项目获取到字符串?

C# SQL Server "loading window"

c# - 将(字符串,多维数组)的对象转换为 C# Dotnet 5.0 中的 JSON 结果

c# - SQL SMO 不枚举表

visual-studio-2010 - 从解决方案中删除 nuget 包恢复