关于C#预编译器变量的梦想

时间:2013-11-19 20:18:42

标签: c# c-preprocessor

我们为Debug和Release版本提供了不同的输出路径。在某些情况下,我们需要使用 输出文件夹中的相对路径,例如,在集成测试中在运行时使用来自repo的大文件,而不是将其复制到输出目录。但调试和发布的相对路径会有所不同。为整个项目级别提供一些预编译器变量将是非常好的。就像在C ++ #define中一样:

RELATIVE_PATH "../../folder"

但是在项目级别上进行项目配置。或者像使用别名指令的C#一样。

using RELATIVE_PATH  = "../../folder"; 

在项目级别,而不是在命名空间或编译单元的级别上。从理论上讲,可以为编译器开发人员实现这样的逻辑,但据我所知,这在C#中是不可能的。

我认为这个问题在某些时候会使用不同的输出文件夹进行调试和发布。有任何想法吗? (每个地方#if DEBUG ... #endif除外)

3 个答案:

答案 0 :(得分:2)

您可以将您的相对根添加到类,如Config.cs,并编写如下内容:

public static class Config
{
 public static readonly RelativeRoot;
 public static Config()
 {
#if Debug
   RelativeRoot = "..\..\folder"
#else
   RelativeRoot = "..\..\folder"
#endif
 }
}

或者将您的相对根添加到App.config并使用配置切换:http://www.blackwasp.co.uk/SwitchConfig.aspx

答案 1 :(得分:1)

如果您使用的是2010或更高版本,则可以使用配置文件转换。

您可以在app.config或web.config中创建appSettings项目,然后在转换文件中设置构建类型的位置:

http://exceptionalcode.wordpress.com/2010/06/21/visual-studio-app-config-xml-transformation/

(也适用于web.config)

答案 2 :(得分:0)

我不确定我完全理解你想要达到的目标。如果要在运行时使用这些文件,也可以在运行时决定它们的路径。您可以在某处创建一个小类或静态方法,将相对路径转换为绝对路径。在该方法中,您可以使用“#if DEBUG”检查来选择正确的基目录。应用程序的每个其他部分都通过此方法加载所有文件,因此他们不需要了解整个路径的魔力。