Web.Debug.config和Web.Release.config设置无效的解决办法

Windows | 2016-08-06 17:26:28 | 阅读 6563 次 | 评论(0)

起因:开发的时候需要在本地和服务器配置不同的数据库连接,本地开发环境连接的是本地数据库,服务器连接的是生产环境数据库。这是在项目开发中很常见的情况。没想到,在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浪费了无数人几个小时甚至几天的生命。


最后,微软的东西还是不错的,人性化、易用,就是有时候犯起神经来让人无语。

文章评论,共0条
游客请输入验证码
浏览1854185次
文章归档
最新评论
  • 静夜思:9年了,当年解决这个问题的思路记忆犹新😊
  • FQYB:汇编是纯文字的吧~