作者在 2016-08-06 17:26:28 发布以下内容
起因:开发的时候需要在本地和服务器配置不同的数据库连接,本地开发环境连接的是本地数据库,服务器连接的是生产环境数据库。这是在项目开发中很常见的情况。没想到,在visual studio.net(2015版)中踩了一个不小的坑。
先是从网上找到了分别设置的办法,在Web.Debug.config中插入
<system.data xdt:Transform="InsertIfMissing">
<DbProviderFactories>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="BlogDBContext" connectionString="User Id=root;host=localhost;Database=bcblog1;password=;port=3306;persist security info=True;character set=utf8;" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
<add name="ApplicationServices" connectionString="User Id=root;host=localhost;Database=bcblog1;password=;port=3306;persist security info=True;character set=utf8;" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
在Web.Release.config中插入
<system.data xdt:Transform="Remove" />
<connectionStrings>
<add name="BlogDBContext" connectionString="User Id=user_blog1;host=47.89.54.39;Database=bcblog1;password=88888888;port=3306;persist security info=True;character set=utf8;" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
<add name="ApplicationServices" connectionString="User Id=user_blog1;host=47.89.54.39;Database=bcblog1;password=88888888;port=3306;persist security info=True;character set=utf8;" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
本来这样问题应该解决了,但根本不起作用,这是微软的东西最让人愤怒的地方:出了问题根本找不到原因在哪里,只能怪自己的人品问题或祈求神明保佑。
经历了几个小时的愤怒、绝望、憎恨、无奈。。。在国外网站中找到了解决办法:
修改项目的配置文件,比如XXX.csproj或XXX.vbproj(csproj或vbproj取决于你使用的语言是C#还是VB.NET),把最后的注释掉的BeforeBuild和AfterBuild部分取消注释,修改为:
<Target Name="BeforeBuild">
<TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
<Target Name="AfterBuild">
</Target>
这是微软犯的错误,一个小bug浪费了无数人几个小时甚至几天的生命。
最后,微软的东西还是不错的,人性化、易用,就是有时候犯起神经来让人无语。