Asp.net mvc 5 Asp.Net EF代码首次与VSTS连续集成-Azure Sql Db未部署

Asp.net mvc 5 Asp.Net EF代码首次与VSTS连续集成-Azure Sql Db未部署,asp.net-mvc-5,azure-web-app-service,entity-framework-migrations,azure-pipelines,dreamspark,Asp.net Mvc 5,Azure Web App Service,Entity Framework Migrations,Azure Pipelines,Dreamspark,我在运行迁移以创建/更新托管在Azure上的Sql Db时遇到问题。它们在本地运行良好,但在发布到Azure时似乎完全被忽略 详情: -Asp.NETMVC5.2.3 -实体框架6.1.3 -Visual Studio团队服务(联机) -Azure Web App和Azure SQL Db(在Imagine/Dreamspark订阅下) 我创建了一个不同的应用程序,它不使用CI,但在VisualStudio中使用了发布功能,它发布得很好,而且工作正常。我已经从Azure中删除了该web应用程序&

我在运行迁移以创建/更新托管在Azure上的Sql Db时遇到问题。它们在本地运行良好,但在发布到Azure时似乎完全被忽略

详情: -Asp.NETMVC5.2.3 -实体框架6.1.3 -Visual Studio团队服务(联机) -Azure Web App和Azure SQL Db(在Imagine/Dreamspark订阅下)

我创建了一个不同的应用程序,它不使用CI,但在VisualStudio中使用了发布功能,它发布得很好,而且工作正常。我已经从Azure中删除了该web应用程序&db,因为订阅只允许一个db

我想这可能是我在VSTS中设置构建定义时缺少的东西,我只是不确定是什么

我试过:

  • (这对我没有任何帮助)
  • (我收到一个生成错误,我的bin文件夹中没有发布定义)
。。。以及其他一些人(我不再打开窗口,或者我也会链接它们)

我当前的构建步骤包括:

  • NuGet还原-NuGet安装程序
  • 生成解决方案-Visual Studio生成
  • 测试程序集-Visual Studio测试
  • 发布符号路径-索引源和发布符号
  • 发布工件-发布构建工件
  • 在我的本地环境中,当我启用迁移、添加迁移、更新数据库时,EF工作。我猜上面的步骤都不能做到这一点,所以我需要一个或多个步骤。Ben Day的博客似乎应该可以运行,但出于某种原因,它找不到我的bin/release文件

    在发布上述成功的构建定义后,实际的应用程序部署到Azure即可。只是数据库被完全忽略了。使用SSMS,我检查Azure db,当它存在时,它没有我的表或数据

    我错过了什么

    谢谢

    **编辑-找到我丢失的简单项。我需要将db的连接字符串添加到Azure中的web应用程序。它现在有了我的初始表,并使用这些表存储数据,但不接受迁移。所以我在过去两天里做了一些事情,把我最初的表格放在那里。现在。。记住那是什么

    **第二次编辑-因此,我认为在我在VSTS中修复连接字符串之前,表已经进入了发行版数据库。我尝试过的一件事是创建一个单独的数据库项目。我想当我在某个时候推动它的时候,当时存在的表也推动发布,我只是看不到它们,因为我没有将应用程序和数据库连接在一起?无论如何,EF迁移仍然没有被识别。我再次尝试了Ben Day的建议,但我得到了构建错误:

    Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.
    

    我正在使用EF 6.1.3

    我也遇到了这个问题。我正在使用Visual Studio发布我的Azure应用程序服务。在做了一些研究()之后,我了解到,当您选中“更新数据库”复选框时,VS publish会转换您的web配置在发布设置中,添加一个连接字符串,该字符串引用包含_migrations表的数据库,以及“entityFramework”下的“contexts”元素。您可以通过查看“.obj\Release\insertefcodeffirstdeploy\transformed\web.config”来查看以前的发布对web.config所做的操作

    因此,为了在VSTS中使用构建和发布定义时重新创建相同的操作,我在我的服务项目的Web.release.config中添加了2个XDT“insert”转换。我的看起来像这样:

    <?xml version="1.0"?>
    <!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=301874 -->
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
      <connectionStrings>
        <add name="MS_TableConnectionString_DatabasePublish" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=AzureStorageEmulatorDb45;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True" 
             providerName="System.Data.SqlClient" xdt:Transform="Insert" />
      </connectionStrings>
      <system.web>
        <compilation xdt:Transform="RemoveAttributes(debug)" />
      </system.web>
      <entityFramework>
        <contexts xdt:Transform="Insert">
          <context type="helpmeshopService.Models.helpmeshopContext, helpmeshopService">
            <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[helpmeshopService.Models.helpmeshopContext, helpmeshopService], [helpmeshopService.Migrations.Configuration, helpmeshopService]], EntityFramework, PublicKeyToken=b77a5c561934e089">
              <parameters>
                <parameter value="MS_TableConnectionString_DatabasePublish" />
              </parameters>
            </databaseInitializer>
          </context>
        </contexts>
      </entityFramework>
    </configuration>
    
    
    

    接下来,您需要转到Azure门户中的应用程序服务“应用程序设置”,添加一个名为“MS\u TableConnectionString\u DatabasePublish”的连接字符串,并将其值设置为与设置中应已存在的“MS\u TableConnectionString”相同的值。

    您的bin文件夹是什么样子?输出中是否有EF程序集?(将本地复制为true)我的本地计算机上的bin文件夹没有发布文件夹(这意味着我猜它也不在VSTS上,并且在该步骤中失败),因此对于查找发布配置的步骤,我将其指向obj文件夹(其中包含调试和发布文件夹)-这使得Ben概述的流程能够通过该步骤。是的,EF设置为Copy Local true。我认为您应该确保在生成定义的末尾有一个针对暂存目录的发布生成工件步骤。然后,您可以再次运行构建并导出文件树的文本版本吗-文件-目录文件