解决 Azure 应用服务中的 .NET TypeLoadExceptions
Resolving .NET TypeLoadExceptions in Azure App Service
我有一个 Azure 应用服务,我在其中发布了我的 .NET 应用程序 (.NET Framework 4.7.2)。该应用程序在本地 Visual Studio IIS Express 上运行良好。
当我在应用程序服务中 运行 它时,我得到 TypeLoadExceptions。例如,有趣的部分是这些错误:
- System.IO.FileLoadException: Could not load file or assembly 'EPiServer.Forms, Version=3.0.0.0, Culture=neutral, PublicKeyToken=8fe83dea738b45b7' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'EPiServer.Forms, Version=3.0.0.0, Culture=neutral, PublicKeyToken=8fe83dea738b45b7'
WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
现在,在任何虚拟服务器情况下,我都可以启用 EnableLog 注册表值并查看更多关于我缺少的依赖项的信息。我试图通过 PowerShell 更改注册表值,但访问被拒绝。我也没有在 Azure 中找到任何 Fusion Log 查看器。
在 Azure 应用服务中调试程序集绑定错误的正确方法是什么?
浏览此内容:How to enable assembly bind failure logging (Fusion) in .NET 但它没有说明在 Azure 应用服务中执行此操作。
现在无法在 Azure 应用服务中获取 Fusion 日志记录。因为需要修改注册表才能启用。但是在 Azure 应用服务中不允许修改注册表。有关详细信息,请参阅 here。
错误"The located assembly's manifest definition does not match the assembly reference."通常表示运行时找到的程序集与您在应用程序中指定的程序集不匹配。
在 Azure 网络应用程序中,您可以通过 FTP 检查 dll。检查“Accessing files via ftp”。 dll 通常位于 \wwwroot\bin
。确认 dll 信息与您在解决方案中使用的 dll 匹配。您可以检查 web.config 和 package.config 是否为该程序集指定了不同的版本。
另请参阅here了解.net运行时如何定位dll。
只是想 post 更新说现在可以启用 Azure 应用程序服务上的 Fusion 日志记录,上面有一篇文章 here。
基本上您所要做的就是添加一个名为 WEBSITE_FUSIONLOGGING_ENABLED 的应用程序设置并将其设置为 1。
我有一个 Azure 应用服务,我在其中发布了我的 .NET 应用程序 (.NET Framework 4.7.2)。该应用程序在本地 Visual Studio IIS Express 上运行良好。
当我在应用程序服务中 运行 它时,我得到 TypeLoadExceptions。例如,有趣的部分是这些错误:
- System.IO.FileLoadException: Could not load file or assembly 'EPiServer.Forms, Version=3.0.0.0, Culture=neutral, PublicKeyToken=8fe83dea738b45b7' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'EPiServer.Forms, Version=3.0.0.0, Culture=neutral, PublicKeyToken=8fe83dea738b45b7'
WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
现在,在任何虚拟服务器情况下,我都可以启用 EnableLog 注册表值并查看更多关于我缺少的依赖项的信息。我试图通过 PowerShell 更改注册表值,但访问被拒绝。我也没有在 Azure 中找到任何 Fusion Log 查看器。
在 Azure 应用服务中调试程序集绑定错误的正确方法是什么?
浏览此内容:How to enable assembly bind failure logging (Fusion) in .NET 但它没有说明在 Azure 应用服务中执行此操作。
现在无法在 Azure 应用服务中获取 Fusion 日志记录。因为需要修改注册表才能启用。但是在 Azure 应用服务中不允许修改注册表。有关详细信息,请参阅 here。
错误"The located assembly's manifest definition does not match the assembly reference."通常表示运行时找到的程序集与您在应用程序中指定的程序集不匹配。
在 Azure 网络应用程序中,您可以通过 FTP 检查 dll。检查“Accessing files via ftp”。 dll 通常位于 \wwwroot\bin
。确认 dll 信息与您在解决方案中使用的 dll 匹配。您可以检查 web.config 和 package.config 是否为该程序集指定了不同的版本。
另请参阅here了解.net运行时如何定位dll。
只是想 post 更新说现在可以启用 Azure 应用程序服务上的 Fusion 日志记录,上面有一篇文章 here。
基本上您所要做的就是添加一个名为 WEBSITE_FUSIONLOGGING_ENABLED 的应用程序设置并将其设置为 1。