2

当我将MVC站点部署到我们的测试服务器时,它将连接到不同的数据库,因此需要不同的连接字符串MVC构建 - 根据构建配置编辑connectionString文件(VS2012)

这通常可以使用的Web.config的变换而改变,但不幸的是我使用其中的ConnectionString在文本文件中确定的NopCommerce解决方案:的App_Data/SETTINGS.TXT

所以,有没有人有任何想法,我可以如何改变这个Settings.txt文件的一行取决于构建配置,例如“调试”或“TeamCityDebug”?

我想到了建事件(见下文),但它们发生的所有编译配置,而不仅仅是“调试”,例如:

enter image description here

回答

1

你可以写一个控制台应用程序来处理您的设置。 TXT 调用控制台应用程序在您的预生成事件

REPLACE.EXE “服务器A”, “服务器B” “.... \ SETTINGS.TXT” ----例如

在控制台应用程序代码

static void Main(string[] args) 
{ 
    FileStream fs = new FileStream(args[3],FileMode.OpenOrCreate); 
    StreamReader sr = new StreamReader(fs); 
    StreamWriter sw = new StreamWriter(fs); 
    string content = sr.ReadToEnd();    
    content = content.Replace(args[0], args[1]); 
    fs.Position = 0; 
    sw.Write(content);    
} 
+0

阿爽 - 谢谢。我还刚刚发现宏在预生成事件中填充我的伪代码,以查明正在使用哪个构建配置: ** $(ConfigurationName)** – WheretheresaWill 2013-04-24 08:58:02

+0

虽然,考虑控制台应用程序a多一点,我可能需要编写一个后生成事件来恢复文件?否则,下一个版本将不得不知道是否上次使用“servera”或“serverb”以查找并替换它... – WheretheresaWill 2013-04-24 09:05:16

+0

也许该文件有多个版本:'SettingsDebug.txt','SettingsRelease.txt'等。然后一个控制台应用程序将正确的一个复制并重命名为'Settings.txt'。 – WheretheresaWill 2013-04-24 09:10:02

0

您可以使用:

#if DEBUG 
    //Load connection from debug file 
#else 
    //Load connection from release file 
#endif 

不确定,如果你可以使用自定义生成像TeamCityDebug配置,但你可以给它一个尝试...

1

感谢您的建议,但我最终创建了多个"<something>settings.txt"文件,然后使用一个简单的构建后事件(命令行操作)将所需的一个复制到我进入正确的目录,并输入所需的名称"Settings.txt"。应用程序选取这些文件并使用其中的connectionStrings。

我增加了以下内容生成后事件:

if $(ConfigurationName) == TeamCityDebug copy /Y "$(ProjectDir)App_Data\TeamCitySettings.txt" 
               "$(ProjectDir)App_Data\Settings.txt" 

if $(ConfigurationName) == Release copy /Y "$(ProjectDir)App_Data\LocalSettings.txt" 
              "$(ProjectDir)\App_Data\Settings.txt"