我能否在 web.config 或 app.config 中设置一个条件编译常量?如果可以,怎么做?

3
我想做这种事情。
我是否可以在我的app.config文件中定义我的符号(例如TESTING或DEBUG)? 如果是的话,你能否提供一个app.config的示例,因为我不确定从哪里开始?
编辑:将app.config添加到标题中,因为我想在app.config中执行此操作
更新:似乎我只能在构建时设置条件编译常量(web.config和app.config在运行时使用,并且只有在程序集编译后才使用)。 要设置条件编译常量,我需要在csproj文件或msbuild选项中执行此操作。

你想要实现什么目标? - MerickOWA
我想确保我的代码的一部分只有在进行单元测试(实际上是一些集成测试)时才会被编译。 - atreeon
3个回答

4
您可以在web.config中定义预处理器符号,如下所示(来源:http://social.msdn.microsoft.com/Forums/en-US/61ad1a74-ae76-47eb-86a9-1bf09f64c906/define-debug-constant-for-a-web-project)。
<system.codedom>
    <compilers>
        <compiler
            language="c#;cs;csharp"
            extension=".cs"
            type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
            compilerOptions="/d:DEBUG,MYCONST"/>
    </compilers>
</system.codedom>

请看compilerOptions=""属性,这里可以定义额外的符号,您可以在前端.aspx.ascx.master文件中使用。我不知道这是否适用于Razor视图。这种方法也不适用于在IDE中设计时编译的代码后文件,它们有自己的符号。
假设这也适用于“代码文件”类型的项目(即“ASP.NET网站”),它们不使用设计时编译,但很少有项目仍然基于此方式工作,所以不要介意 :)

我目前并没有使用Web项目,只是在考虑在C#库项目和app.config文件中实现此功能。但目前似乎无法使其正常工作。 - atreeon
@TwistedInferno,那你为什么在问题标题中提到了“web.config”?无论如何,类库的编译时符号是在“.csproj”文件中定义的,而不是在“app.config”中(后者存储运行时配置)。 - Dai
抱歉,是我不好,昨晚熬夜了。谢谢Dai。 - atreeon

2
不,处理器指令在web.config或app.config文件中不可用。
编辑后添加:这些文件实际上并没有被编译,而#debug预处理器值在编译期间用于告诉编译器该做什么。

想到这可能是情况,但Dai的回答表明情况并非如此。app.config文件只在运行时起作用,那么在web.config中如何工作呢? - atreeon
@TwistedInferno的回答适用于当网站请求该页面时,编译aspx ascx文件背后的代码的网站。 - MerickOWA

1
抱歉,网络应用程序类型项目不支持此功能。app/web.config 中的预处理器定义仅影响在网站/应用程序运行后编译的代码,但对于 Web、控制台应用程序和库,所有代码首先都会被编译并与静态内容和资源一起部署为一个程序集。建议创建应用程序设置,然后进行运行时检查而不是编译时检查。这将允许您在运行时启用 app/web.config 中的设置,而无需重新编译代码即可实现预期效果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接