Azure网站GIT部署:服务器编译.DLL与本地构建的.DLL不同

时间:2013-01-14 06:16:32

标签: entity-framework azure azure-web-sites azure-git-deployment

我有一个MVC4 + EF4.0 .NET 4.5项目(比如MyProject)我能够在本地运行项目就好了。当我 FTP部署它到Azure网站(而不是云服务)时,它运行正常。但是,如果我执行 GIT部署,则网站“运行”大部分,直到执行某些EF5.0数据库操作。我得到例外Unable to load the specified metadata resource

经过调试,我发现如果我:

  • GIT部署整个MVC4项目(如前所述)
  • 在GIT推送后(即相同来源)将FTP替换为bin\MyProject.dll,并将bin\MyProject.dll文件替换为我刚刚在本地构建的System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5"),文件(Windows 8 x64,VS2012,Oct'12 Azure工具)

然后Azure托管网站运行得很好(甚至是EF5.0数据库功能部分)。

本地构建的.dll比Azure GIT发布的内置版本大约5KB,并且都是“发布”模式。很明显,在GIT推送之后构建的项目(在Azure内部)的构建方式与在我自己的PC上的构建方式不同。我检查了门户网站,它设置为.NET 4.5。我也是GIT推送整个解决方案文件夹(只有一个项目),而不仅仅是一点点小事。

当我加载本地构建的以及远程构建的MyProject.dll文件时,我注意到以下差异( FrameworkDisplayName

  • local:System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.5", FrameworkDisplayName = ""),

  • 远程:{{1}}

任何人都知道为什么会发生这种情况以及解决方案可能是什么?

2 个答案:

答案 0 :(得分:2)

是的,这是一个将在下一个版本中修复的错误。好消息是,今天可以解决这个问题:

首先,您需要按照post使用自定义部署脚本。

然后,您需要根据此issue更改自定义脚本中的MSBuild命令行。

答案 1 :(得分:2)

对于指针和提示,上面是大卫。我投票给他,但我也会在这里发布问题的确切解决方案。我编辑了我原来的帖子,因为我发现有一个主要的错误,直到我从头开始(移动GIT服务器)才注意到。所以这是整个过程,为我工作。

  • Download Node.JS(即使是.NET项目也需要它,因为GIT部署工具使用它)
  • 安装azure-cli工具(打开常规命令提示符=>> npm install azure-cli -g
  • 在命令提示符中,cd到存储库的根目录(cd \projects\MyRepoRoot
  • 在那里,输入azure site deploymentscript --aspWAP PathToMyProject\MyProject.csproj -s PathToMySolution.sln(显然根据需要调整路径)
  • 这将创建.deploymentdeploy.cmd个文件
  • 现在编辑deploy.cmd文件,找到以%MSBUILD_PATH%开头的行(只会是一行)
  • 插入/t:Build参数。例如:
    • [之前] %MSBUILD_PATH% <blah blah> /verbosity:m /t:pipelinePreDeployCopyAllFilesToOneFolder
    • [After] %MSBUILD_PATH% <blah blah> /verbosity:m /t:Build /t:pipelinePreDeployCopyAllFilesToOneFolder
  • 推送到GIT(如果一切正常,请检查GIT输出)
  • 浏览到您的网站并确认其有效!

如果在下一版本中修复它,我将很高兴,因此我们不会维护构建脚本