9

我正在尝试将 Bitbucket 部署设置到 Azure 网站。我成功链接了 Bitbucket 和 Azure,但是当我推送到 Bitbucket 时,我在 Azure 站点上收到以下错误:

在此处输入图像描述

如果我单击“查看日志”,则会显示以下编译错误:

    D:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1578,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors. [C:\DWASFiles\Sites\<projname>\VirtualDirectory0\site\repository\<projname>.Common\<projname>.Common.csproj]
    D:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1578,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "WebMatrix.WebData, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors. [C:\DWASFiles\Sites\<projname>\VirtualDirectory0\site\repository\<projname>.Common\<projname>.Common.csproj]
    CustomMembershipProvider.cs(5,7): error CS0246: The type or namespace name 'WebMatrix' could not be found (are you missing a using directive or an assembly reference?) [C:\DWASFiles\Sites\<projname>\VirtualDirectory0\site\repository\<projname>.Common\<projname>.Common.csproj]
    CustomMembershipProvider.cs(9,38): error CS0246: The type or namespace name 'ExtendedMembershipProvider' could not be found (are you missing a using directive or an assembly reference?) [C:\DWASFiles\Sites\<projname>\VirtualDirectory0\site\repository\<projname>.Common\<projname>.Common.csproj]
    Models\AccountModels.cs(3,18): error CS0234: The type or namespace name 'Mvc' does not exist in the namespace 'System.Web' (are you missing an assembly reference?) [C:\DWASFiles\Sites\<projname>\VirtualDirectory0\site\repository\<projname>.Common\<projname>.Common.csproj]
    CustomMembershipProvider.cs(198,37): error CS0246: The type or namespace name 'OAuthAccountData' could not be found (are you missing a using directive or an assembly reference?) [C:\DWASFiles\Sites\<projname>\VirtualDirectory0\site\repository\<projname>.Common\<projname>.Common.csproj]
    Models\AccountModels.cs(40,10): error CS0246: The type or namespace name 'Compare' could not be found (are you missing a using directive or an assembly reference?) [C:\DWASFiles\Sites\<projname>\VirtualDirectory0\site\repository\<projname>.Common\<projname>.Common.csproj]
    Models\AccountModels.cs(40,10): error CS0246: The type or namespace name 'CompareAttribute' could not be found (are you missing a using directive or an assembly reference?) [C:\DWASFiles\Sites\<projname>\VirtualDirectory0\site\repository\<projname>.Common\<projname>.Common.csproj]
    Models\AccountModels.cs(73,10): error CS0246: The type or namespace name 'Compare' could not be found (are you missing a using directive or an assembly reference?) [C:\DWASFiles\Sites\<projname>\VirtualDirectory0\site\repository\<projname>.Common\<projname>.Common.csproj]
    Models\AccountModels.cs(73,10): error CS0246: The type or namespace name 'CompareAttribute' could not be found (are you missing a using directive or an assembly reference?) [C:\DWASFiles\Sites\<projname>\VirtualDirectory0\site\repository\<projname>.Common\<projname>.Common.csproj]

请注意,这些编译错误针对我项目中的另一个程序集(我放置业务逻辑的程序集)。

谷歌搜索时,我发现的唯一提及是必须将这些引用的“本地副本”标志设置为 true。我已经尝试过了,但仍然遇到相同的错误。

这一切都在本地编译得很好。有任何想法吗?

更新

为了添加更多信息,我在 Git 存储库中的项目结构如下:

+ProjName
    ProjName.csproj
    web.config
    ...etc...
+ProjName.Common
    ProjName.Common.csproj
+ProjName.Tests
    ProjName.Tests.csproj
+packages <-- these are Nuget packages
ProjName.sln

Azure 显示的编译错误表明失败的是 ProjName.vcproj - 但它们指的是 ProjName.Common 程序集参考。

请注意,此布局是 VisualStudio 创建的(即 webroot 的额外项目子目录)。

我不确定 Azure 在进行 Git 部署时会做什么。它是否认识到 ProjName 目录是 webroot,并且还解析 ProjName.sln 编译解决方案中的任何其他程序集(与 Visual Studio 相同)?

另外,我没有向 Git 添加任何“bin”文件夹。但是,我只是将其作为测试进行了尝试,它并没有改变 Azure 产生的编译错误。

4

3 回答 3

13

2012 年 11 月 25 日更新:查看 Dan 的 repo 后,问题是库项目使用 GAC 中的 Mvc 4 而不是使用 NuGet 包。切换到 NuGet 包可以使其在 Azure 上正常工作。

理论上,MVC4 可以在 Azure 机器上的 GAC 中,这不是问题。也许他们会在某个时候到达那里。虽然一般来说,MVC 团队越来越多地推动基于 NuGet 的模型,您不依赖于 GAC 中的东西。

原答案:

通常,您应该避免将二进制文件提交到您的 git 存储库,而是依靠 NuGet 来检索它们。请参阅https://github.com/KuduApps/Mvc4ApplicationFx40WithLib以获取执行此操作并在 Azure 网站中正常工作的示例项目。

但根据您的项目结构,我看到您的项目似乎使用 C++ (.vcproj)。如果是这样,那么可能的问题是今天通过 git 发布时,Azure 网站可能不支持 C++。到目前为止,我不认为人们必须使用 C# 和 VB。如果这确实是问题,那么我建议您在https://github.com/projectkudu/kudu上打开一个问题,以便我们可以正确跟踪它。

于 2012-11-22T17:03:15.113 回答
2

所以我的 .Common 程序集引用了 System.Web.Mvc 和 WebMatrix.WebData,看起来 Azure 不支持。我有一些成员代码,它们在公共程序集中而不是 Web 项目中使用这些引用。删除那些,删除错误。我将不得不稍微重构代码,以便公共库不需要这些引用。

于 2012-11-24T09:26:53.270 回答
0

我今天在天蓝色的训练营遇到了这个问题。

在解决方案上启用 Nuget 包还原并将这些更改提交到 github 存储库启用成功部署

于 2013-04-27T12:45:26.343 回答