2009-05-06 221 views

回答

15

你不能,不是真的。 你可以做的是定义一些“条件编译符号”,如果你看一下你的项目设置的“Build”页面,你可以在那里设置它们,所以你可以编写#if语句来测试它们。

调试符号被自动注入(默认情况下,这可以被关断),用于调试版本。

所以你可以这样写代码

#if DEBUG 
     RunMyDEBUGRoutine(); 
#else 
     RunMyRELEASERoutine(); 
#endif 

但是,除非你已经很好的理由不这样做。在调试和发布版本之间使用不同行为的应用程序对任何人都没有好处。

+1

开发Windows服务(无需安装/调试变得更加容易) – Scoregraphic 2009-05-06 12:38:21

+0

@Scoregraphic时,它可以帮助:但是有相当不同的行为(服务与命令行应用程序)! – 2009-05-06 12:49:03

0

我不相信你可以注入在编译时到组装,但你可以实现它的一种方法是使用的MSBuild并将其添加到应用程序的配置文件。

看到这个博客张贴有关如何使用的MSBuild做多环境配置文件 - http://adeneys.wordpress.com/2009/04/17/multi-environment-config/

或者你可以写一个MSBuild任务,将编辑某个编译的文件(你的C#或VB文件),并具有运行在BeforeBuild任务中。这将是相当棘手的,因为你需要计算出将它注入文件的位置,但是假如你有一些标记化设置,你应该可以做到。我也怀疑它会很漂亮!

13

如果你卸载你的项目(在右键菜单),只是在</Project>标签可以节省出一个其中有您的配置文件之前添加此。然后,您可以将它读回来以便在您的代码中使用。

<Target Name="BeforeBuild"> 
    <WriteLinesToFile File="$(OutputPath)\env.config" 
         Lines="$(Configuration)" Overwrite="true"> 
    </WriteLinesToFile> 
</Target> 
5

条件编译符号可以用来实现这一点。您可以为每个项目定义自定义符号属性>构建设置窗格,并使用#if指令在代码中测试它们。

实施例示出了如何定义符号UNOEURO以及如何使用它的代码。

UNOEURO symbol defined here

bool isUnoeuro = false; 
#if UNOEURO 
    isUnoeuro = true; 
#endif