如何在Visual Studio中编译之前替换全局字符串

时间:2014-10-29 05:17:59

标签: c# regex visual-studio

每次编译应用程序时,我都希望在我的解决方案/项目中的所有文件中用$(Database)替换[DatabaseName]之类的字符串。

我查看了预构建事件和宏,但无法弄清楚如何将自己的键值对添加到它。该解决方案有许多sql文件需要替换特定的变量。这可以通过RegEx完成吗?我知道我可以做一个FindAll / ReplaceAll,但这并没有解决一遍又一遍这样做的问题。

2 个答案:

答案 0 :(得分:0)

好的,所以这可能不是最好的解决方案,但我认为它会比尝试找到某种内部解决方案更好,以便在编译时替换非代码字符串的所有实例。

这个想法是预处理器指令。您可以在任何行上使用#运算符来添加预处理程序指令。

一个是if / elif / else:

#if DEBUG
     // Access your test database here
#else
     // Put your hard-coded database calls in here.
#endif

这样,Debug分支的任何构建都将在您的测试代码上执行,任何Release构建都将执行原始的硬编码数据库调用。

你也可以在#define中使用自己的自定义值,比如#define MYTESTVARIABLE,然后执行#if TESTVARIABLE ... #endif包含的部分。

以下是MSDN页面:http://msdn.microsoft.com/en-us/library/ed8yd1ha.aspx

正如我所说,这不是最佳选择 - 它肯定会增加代码量 - 但我认为它可能不如你想要的那么脆弱。

答案 1 :(得分:0)

在SQL Server或ORACLE中,您可以使用CREATE SYNONYM在代码中设置名称,以便代码库始终永远引用相同的名称,这样您就不必更改代码,只需在每台服务器上创建一个SYNONYM每个表或对象。

在你所描述的所有情况下,我都找到了一种方法,而不使用SYNONYM来消除编译期间代码文件更改的需要。因此,不需要在您描述的情况下实际使用同义词。我建议你采取不同的方法解决问题。尽量不要在每次编译时修改代码。通常只需要配置文件或运行时调整。

另请注意,您可能会在生成的文件中看到“MyDevDatabaseActualName”,但实际上您不必将其替换为QA或Prod数据库名称。您要替换的名称是从初始数据库连接中选择的TypeName,只需要更改配置文件即可指向新数据库。