2014-10-29 44 views
0

我每次编译我的应用程序在编译之前如何更换全局的字符串,我想更换一个字符串,如$(Database)[DatabaseName]中的所有文件我的解决方案/项目内。在Visual Studio

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

+0

对不起,如果你不介意我问,你为什么不只是写[数据库名],而不是$(数据库)? – furkle 2014-10-29 05:21:57

+0

变量需要根据部署配置文件进行更改。 – 2014-10-29 05:23:17

+0

好的,我很困惑 - 括号通常指的是C#中的属性。有没有办法在运行时查询它,而不是改变你的整个程序的预编译?这个概念看起来非常脆弱。 – furkle 2014-10-29 05:27:46

回答

0

好了,所以这可能不是最好的解决办法,但我认为这会是比试图找到某种内部解决在编译时更换非代码串的所有实例更好。

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

一个是,如果/ elif的/其他:

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

这样,调试分支机构的任何版本将执行你的测试代码,任何发布版本将执行原来的硬编码的数据库调用。

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

这里的MSDN页:http://msdn.microsoft.com/en-us/library/ed8yd1ha.aspx

正如我所说的,这是不是最好的选择 - 它肯定会增加的代码量 - 但我认为这可能比你在哪里在你的脑袋去不太脆。

0

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

在所有情况下,像你描述我已经找到一种方法,而无需使用同义词移除在编译的代码文件更改的需要。因此不需要在你描述的情况下实际使用同义词。我建议你采取不同的方法解决问题。尽量不要修改每个编译的代码。通常配置文件或运行时调整是所需要的。

另外要注意,您可以在生成的文件“MyDevDatabaseActualName”看到但在现实中,你不必与QA或PROD数据库名称来取代它。您要替换的这个名称是从您的初始数据库连接中选择的TypeName,只需要修改配置文件即可指向新的数据库。