gpt4 book ai didi

asp.net-mvc - Azure 上的 Microsoft.Web.Administration 程序集错误

转载 作者:行者123 更新时间:2023-12-04 01:14:22 28 4
gpt4 key购买 nike

我一直在尝试将新的 asp.net mvc 项目部署到 Azure 进行生产。一切都在本地运行,但我在部署时遇到了程序集问题。

导航到大多数页面后,我开始收到以下错误:

Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

使用来自:https://stackoverflow.com/a/8824250/1411764的信息我发现了异常:

Could not load file or assembly 'Microsoft.Web.Administration, 
Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or
one of its dependencies. The system cannot find the file specified.

Microsoft.Web.Administration 似乎是一个 IIS 程序集。

然后,我使用 NugetMicrosoft.Web.Administration 添加到项目中.

现在我遇到了一个新错误:

Could not load file or assembly 'Microsoft.Web.Administration' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我尝试在 web.config 中添加绑定(bind)重定向

<dependentAssembly>
<assemblyIdentity name="Microsoft.Web.Administration" publicKeyToken="31BF3856AD364E35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.9.0.0" newVersion="7.9.0.0" />

此时它立即中断,我无法加载任何页面。 (看起来比我没有额外的 dll 时更糟糕。

我读过很多类似的帖子,但似乎无法弄清楚。希望我由于对 Azure 缺乏了解而犯了一些简单的错误。任何帮助将不胜感激。

更新信息

右键单击属性以供引用Microsoft.Web.Administration:

复制本地:True

运行版本v2.0.50727

版本:7.0.0.0

调用程序集:Microsoft.WebMatrix.Core,Version=8.1.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35

更新 2 - 来自评论:

设置绑定(bind)到 7.0.0.0 后,它现在会在服务器上再次编译并可以显示一些页面,但我仍然捕获之前的错误。

Could not load file or assembly 'Microsoft.Web.Administration, Version=7.9.0.0, 
Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)

我认为 Nuget 仅提供了 7.0.0.0 版本,但有些人认为它需要 7.9.0.0

更新 3:成功

我开始研究版本号差异,发现了这个 stack question这解释了 IIS 和 IISExpress 之间的一些差异。

目前,我将重定向从 7.9.0.0 更改为 7.0.0.0,这似乎解决了问题。

<bindingRedirect oldVersion="0.0.0.0-7.9.0.0" newVersion="7.0.0.0" />

程序集现在可以工作并且页面正在加载。

虽然这个解决方案感觉非常hacky。绑定(bind)到较低版本是不好的做法还是可能在将来引起问题?我担心我应该解决调用不同 IIS 版本的代码。

最佳答案

这可能不是最佳解决方案,但它是评论中的建议、原始问题、我所做的研究和测试以及我对结果的解释的总结。我希望它会有用。感谢所有为解决此问题做出贡献的人。

TL;DR:在您的 BUILD 系统上安装 IIS 和 IIS 管理功能,或在安装了这些功能的系统上进行构建。

此错误意味着您的应用程序正在尝试加载 Microsoft.Web.Administration 的 IIS Express 版本,这可能不是您在生产服务器上想要的。

  • 版本 7.0.0.0 适用于 IIS
  • 版本 7.9.0.0 适用于 IIS Express

(另请参阅 https://stackoverflow.com/a/11216326/2279059 )

要使您的应用程序在具有真正 IIS 的生产系统上运行,您必须在安装了 Microsoft.Web.Administration 的 IIS(不仅是 IIS Express)版本的系统上构建它。安装,即您必须安装 IIS 并启用 IIS 管理功能(在不同的 Windows 版本/版本上其名称略有不同),因此 C:\Windows\system32\inetsrv\Microsoft.Web.Administration .DLL 存在。

在您的项目文件中,对 DLL 的引用应如下所示:

<Reference Include="Microsoft.Web.Administration, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll</HintPath>
<SpecificVersion>True</SpecificVersion>
</Reference>

(这适用于 Visual Studio 2012,对于较新的版本可能有所不同!)

请注意,如果您关闭 SpecificVersion 或将 Version 设置为 7.9.0.0,只要您在 IIS 和Microsoft.Web.Administration 已安装。但是,如果您在缺少 DLL 的系统上构建它,则您的应用程序可能会链接到 DLL 的 IIS Express 版本(随 Visual Studio 一起提供),从而导致问题中描述的问题。因此,您最好指定版本。如果构建系统上未安装 DLL,这将使构建失败,这比生成损坏的可执行文件的“成功”构建更容易调试。

网络上还有一个名为 Microsoft.Web.Administration 的 NuGet 包。根据较旧的信息 ( https://blog.lextudio.com/2015/05/whats-microsoft-web-administration-and-the-horrible-facts-you-should-know/ ),这不是 Microsoft 软件包,不应使用。然而,微软现在似乎已经获得了该软件包的所有权。虽然我在 Visual Studio 2012 中的 NuGet 上找不到它,但我在 Visual Studio 2015 中编写的应用程序使用此包,并且在多个版本的 Windows 上运行良好(例如 Windows Server 2012 和 Windows 10,它们具有不同版本的 IIS)。因此,使用 NuGet 包可能会解决所有这些问题。

关于asp.net-mvc - Azure 上的 Microsoft.Web.Administration 程序集错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27166276/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com