在VS 2012中一键发布:如何删除_ConnectionStringsToInsert?

12

我通常将连接字符串放在单独的文件中,在web.config文件中添加如下内容:

<connectionStrings configSource="WebConnection.config" />

我刚刚安装了VS 2012,它自动获取了我的现有发布设置。 然而,当我进行Web发布时,它现在会自动添加两个连接字符串,因此我的部署目标上的web.config文件看起来像这样:

  <connectionStrings configSource="WebConnection.config">
    <add name="EF.Model.DbContext" connectionString="EF.Model.DbContext_ConnectionString" providerName="System.Data.SqlClient" />
    <add name="Migrations.Db.MigrationDb" connectionString="Migrations.Db.MigrationDb_ConnectionString" providerName="System.Data.SqlClient" />
  </connectionStrings>

当使用configSource时,节点内容必须为空,否则会产生错误。

我注意到在新生成的.pubxml文件中(其中存储发布设置),有以下几行:

  <ItemGroup>
    <_ConnectionStringsToInsert Include="EF.Model.DbContext" />
    <_ConnectionStringsToInsert Include="Migrations.Db.MigrationDb" />
  </ItemGroup>

我该如何删除它们? :) 如果我从文件中删除它们,那么每次编辑发布设置时,Web发布对话框都会再次添加它们。


抱歉您遇到了这个问题,我们已经为此提交了一个错误报告,并会尽力解决它。 - Sayed Ibrahim Hashimi
3
您好,@SayedIbrahimHashimi,您知道这个 bug 是否已经解决了吗?我遇到了这个问题。 - IanW
3个回答

6
我突然想到,在项目属性中,选择“Package/Publish Web”,勾选“在P/P SQL选项卡中包括所有配置的数据库”(我没有任何已配置的数据库 :))。
完成此操作并从.pubxml中删除上述行后,一切都正常了。
看起来像是个技巧,但这对我来说是个解决办法 :)
@Sayed,谢谢您确认这是一个错误,希望它会得到解决!

4
这个修复似乎不能让那些行保持不出现。每当您进入发布对话框中的连接字符串配置页时,它们仍然会返回。 - Brannon

4

我想到了一个(可能)不那么hacky的解决方案,可以绕过发布中强制要求发现Entity Framework代码优先db上下文具有连接字符串的错误。这仍然是我在VS 2013中遇到的问题。

在您的web.config文件中,添加一个虚拟版本的连接字符串:

<add name="DbContextName" connectionString="This is a dummy connection string to bi-pass publish bug." providerName="System.Data.SqlClient" />

现在,为要创建发布包的配置设置一个转换。可以在此处了解更多信息。
在您的web.config.{configuration}文件中,使用以下转换来删除连接字符串:
<connectionStrings>
  <add name="DbContextName" xdt:Transform="Remove" xdt:Locator="Match(name)"/>
</connectionStrings>

这个转换器在你的pubxml中发布转换器之后运行,因此它清除不需要的连接字符串。

如果您没有像tdykstra的答案中启用迁移,那么这似乎是唯一的解决方案。Web Deploy过程不会尝试添加连接字符串,如果它已经在web.config文件中看到它们,并且构建转换在构建过程中愉快地从web.config文件中删除它们。 - Clint
这个解决方案对我也起作用,我唯一做的更改是在 Web.Release.config 文件中,使用 <connectionStrings xdt:Transform="Remove" /> 删除了所有连接字符串,只用了一行代码。 - Nelson Reis

1
在发布配置文件的“设置”选项卡中,取消选中“在运行时使用此连接字符串”和“应用Code First迁移”复选框。确保启用了迁移,否则“使用此连接字符串”框将无法保持清除状态,即使启用了迁移,每次打开配置文件时也可能需要再次清除它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接