我通常把我的连接字符串放到一个单独的文件中,在web.config中添加类似的东西:
<connectionStrings configSource="WebConnection.config" />
我刚刚安装了VS 2012,它会自动获取我现有的发布设置。 但是,当我进行网络发布时,它现在自己添加了两个连接字符串,因此部署目标上的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-publish对话框会在我编辑发布设置时随时添加它们。
答案 0 :(得分:6)
我突然决定通过转到项目属性,“打包/发布Web”并选中“包含在P / P SQL选项卡中配置的所有数据库”标记(并且我没有配置任何数据库:))。
执行此操作并从.pubxml中删除上述行后,一切都很顺利。
看起来像一个黑客,但它是一种方式去找我:)。
@Sayed,感谢您确认这是一个错误,希望它能够得到解决!
答案 1 :(得分:4)
我提出了一个(可能)不那么糟糕的解决方案来绕过发布中的错误,强制发现实体框架代码第一个db上下文有一个连接字符串。这仍然是我在VS 2013中遇到的一个问题。
在您的web.config中,添加连接字符串的虚拟版本:
<add name="DbContextName" connectionString="This is a dummy connection string to bi-pass publish bug." providerName="System.Data.SqlClient" />
现在,为要为其创建发布包的配置设置转换。阅读更多相关信息here。
在您的web.config。{configuration}文件中,使用以下转换删除连接字符串:
<connectionStrings>
<add name="DbContextName" xdt:Transform="Remove" xdt:Locator="Match(name)"/>
</connectionStrings>
此变换在pubxml中的发布转换运行后运行,因此它会清除不需要的连接字符串。
答案 2 :(得分:1)
在发布配置文件的“设置”标签上,清除在运行时使用此连接字符串复选框和应用首次迁移代码复选框。确保已启用迁移,或者使用此连接字符串框不会保持清除状态,即使这样,您每次打开配置文件时也可能需要再次清除它。