12

我通常将我的连接字符串放到一个单独的文件中,在 web.config 中添加类似这样的内容:

<connectionStrings configSource="WebConnection.config" />

我刚刚安装了 VS 2012,它会自动获取我现有的发布设置。但是,当我进行 webpublish 时,它现在自己添加了两个连接字符串,所以我在部署目标上的 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>

我怎样才能删除它们?:) 如果我从文件中删除它们,网络发布对话框会在我编辑发布设置时添加它们。

4

3 回答 3

6

我突然通过转到项目属性“打包/发布 Web”并选中标记“包括在 P/P SQL 选项卡中配置的所有数据库”(并且我没有在那里配置任何数据库:))解决了这个问题。

完成此操作并从 .pubxml 中删除上述行后,一切正常。

看起来像一个黑客,但它是我的一种方式:)

@Sayed,感谢您确认这是一个错误,希望它会得到解决!

于 2012-06-08T09:22:02.300 回答
4

我想出了一个(可能)不那么棘手的解决方案来绕过发布中的错误,该错误强制发现实体框架代码首先数据库上下文具有连接字符串。这仍然是我在 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 中的发布转换运行之后运行,因此它清除了不需要的连接字符串。

于 2014-03-17T21:37:34.143 回答
1

在发布配置文件的设置选项卡上,清除在运行时使用此连接字符串复选框和应用代码优先迁移复选框。确保已启用迁移,否则使用此连接字符串框不会保持清除状态,即使如此,您每次打开配置文件时可能都必须再次清除它。

于 2012-06-06T15:23:49.437 回答