2015-10-16 117 views
3

我可以使用MSBuild变量,以便在我的代码中解析它们吗?我正在考虑一段需要$(ProjectDir)的代码,因为它永远不会被移动(这是一个单元测试项目)。

一个例子:

public class MyTestDataPath 
{ 
    public void GetTestData() 
    { 
     return SOME_COMPILE_TIME_PROJECT_DIR_MACRO + "\\test-data"; // Should resolve via $(ProjectDir) during compile time. 
    } 
} 

回答

0

是的,有。但不是直接在你的代码中。你可以在你的项目属性定义了预生成的行动:

echo $(ProjectDir) > "$(ProjectDir)\Resources\ProjDir.txt" 

然后你就可以在你的项目属性添加文件projdir.txt作为一种资源,并参照内容在您的代码:

var dir = Resources.ProjDir 

但我只是简单地将postbuild操作中的测试数据复制到输出目录中,并使用反射在运行时获取它(二进制文件和测试数据现在可以移植到其他开发人员)。

+0

把它放在资源中是一个不错的主意。以前没有想到那个。 – Marnix

+0

我希望答案对你来说已经足够好了,而且它很有效。我只是想了解另一个解决方法:你可以编写'var dir =“__PROJDIR __”',在prebuild步骤中你可以用'$(ProjectDir)'搜索和替换'__PROJDIR__'。 – anscheinbar

+0

但它会一直到预构建步骤。这是我想避免的。 – Marnix