未找到 Microsoft.AspNetCore.Antiforgery

Posted

技术标签:

【中文标题】未找到 Microsoft.AspNetCore.Antiforgery【英文标题】:Microsoft.AspNetCore.Antiforgery was not found 【发布时间】:2017-11-22 00:53:44 【问题描述】:

我正在将一个 asp.net core 2.0 网站部署到 IIS 10。

我已确保我的应用在 program.settings 文件中使用了正确的 ISS 配置。

public class Program

    public static void Main(string[] args)
    
        BuildWebHost(args).Run();
    

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

在我的 startup.cs 文件中:

    public void ConfigureServices(IServiceCollection services)
    
        services.Configure<IISOptions>(options =>
        
        );
        services.AddMvc();
    

然而,当我从命令行运行 dotnet website.dll 时,我在命令行窗口中收到以下错误消息:

应用程序依赖清单中指定的程序集 (website.deps.json) 未找到: 包:'Microsoft.AspNetCore.Antiforgery',版本:'2.0.1' 路径:'lib/netstandard2.0/Microsoft.AspNetCore.Antiforgery.dll' 这个程序集应该在本地运行时存储中,因为 应用程序是使用以下目标清单文件发布的: aspnetcore-store-2.0.3.xml

根据错误消息,我猜测 Microsoft.AspNetCore.Antiforgery 在我发布时没有被捆绑,因为我在调试时没有收到此错误。

如何确保我的应用在发布到实时环境时可以找到 Microsoft.AspNetCore.Antiforgery?

编辑:这是一个基本的 .net 核心网站。除了上述为 IIS 部署所做的更改外,目前尚未对标准项目进行任何更改。

当我从 IIS 而不是命令行运行项目时,我收到 502.5 错误消息。

【问题讨论】:

试试dotnet restore。如果这无济于事,请使用临时解决方案,只需将此 *.dll 从本地复制到部署 正如@J.Doe 提到的,试试dotnet restore。你也介意分享你的 csproj 吗? 如果您在 Windows(服务器以外的其他地方)发布并在 Linux 中运行,请确保两个 .Net SDK 的版本相同或兼容。您可以通过dotnet --infodotnet --version 查看他们的版本。 【参考方案1】:

我能够通过将服务器上的 .net 核心运行时更新到 v2.0.3 来解决此问题。

如果发生此问题

    您有一个运行 .net 核心运行时 v2.0.0 的现有服务器。 您创建了一个面向 SDK v2.0.3 的应用 您将 v2.0.3 应用发布到运行 v2.0.0 的服务器

可以通过在服务器上安装 v2.0.3 的运行时解决此问题。您可以从这里的 microsoft 站点下载运行时 https://www.microsoft.com/net/download/windows

【讨论】:

或者,您可以恢复到早期的 .NET Core Nuget 包。我必须安装 2.0.0,因为我推送的 Pivotal Cloud Foundry buildpack 是 2.0.0,而我的构建使用的是 2.0.3。 有一个“ASP.NET Core Runtime”和一个“.NET Core Runtime”。只有 ASP 版本为我解决了这个问题(v2.0.7 有效)。此外,在下载页面上,您首先必须单击“运行应用程序”按钮才能访问这些下载。 在我的情况下,我需要将 Dockerfile 中的基本映像从 aspnetcore:2.0 更改为 aspnetcore:2.0.8,因为我引用的是 Microsoft.AspNetCore.All 2.0.8,它需要 Microsoft.AspNetCore.Antiforgery > = 2.0.3.【参考方案2】:

如果您实际使用此库,请确保您的 *.csproj 文件具有相应的显式引用:

<PackageReference Include="Microsoft.AspNetCore.Antiforgery" Version="..." />

然后,使用 PublishWithAspNetCoreTargetManifest 属性来解决上述清单不匹配的问题。 查看以下主题以了解有关其部署过程中可能出现的问题的更多信息:

An assembly specified in the application dependencies manifest (RhWeb.deps.json) was not found

published application is missing assembly (missing runtime store associated ...) [2.0.0-preview2-005905]

HTTP Error 502.5 - Microsoft.AspNetCore.Antiforgery.dll

【讨论】:

添加值为 false 的 PublishWithAspNetCoreTargetManifest 属性似乎对我有用。我确实注意到发布中包含的其他文件。它似乎使应用程序完全独立?【参考方案3】:

我遇到了这个问题 - 简单的解决方法,实际安装 NuGet 包(我没有使用它)。

Microsoft.AspNetCore.Antiforgery

已发布、部署 - 修复了问题。

在另一种情况下,当我发布项目时,很多 dll 都没有放在发布文件夹中 - 包括 Antiforgery。下面似乎强制发布以添加所有必需的 dll。

编辑您的 projectname.json 文件以确保 PropertyGroup 包含 PublishWithAspNetCoreTargetManifest = false

<PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>

有兴趣知道为什么上述方法有效吗?!

【讨论】:

谢谢!简化了我在旧 VPS 上使用不同版本的 dotnet 进行不同项目的依赖噩梦。【参考方案4】:

如果调用了 Antiforgery 但未安装 Antiforgery,也会出现此问题。

可以通过 Nuget 包管理器安装 Microsoft.AspNetCore.Antiforgery 来修复。

【讨论】:

【参考方案5】:

我用这个解决方案在我的内部 windowsserver 上解决了这个问题 * 去网芯https://github.com/dotnet/core/tree/master/release-notes * 转到最新版本的核心运行时 2.? * 在我的情况下下载 DotNetCore.2.0.6-WindowsHosting.exehttps://github.com/dotnet/core/blob/master/release-notes/download-archives/2.0.6-download.md#net-core-runtime-only-installation

在服务器上安装它,错误就为我解决了。希望这对任何人都有帮助。

【讨论】:

【参考方案6】:

Microsoft.AspNetCore.All 从 v2.0.7 更新到 v2.0.8(当时最新)然后发布到运行 .NET Core Runtime v2.0.7(当时最新)的服务器后出现此错误。

Microsoft.AspNetCore.All 降级到 v2.0.7,重新发布,一切正常。

【讨论】:

【参考方案7】:

如果您按照链接的屏幕截图将应用程序发布为独立的 ASP.NET Core 2.2 应用程序(我没有足够的内嵌图像代表),它将解决此问题。

自包含:

可以在编辑发布设置时进行设置。

【讨论】:

以上是关于未找到 Microsoft.AspNetCore.Antiforgery的主要内容,如果未能解决你的问题,请参考以下文章

Azure 应用服务:未找到应用程序依赖项清单 (Microsoft.AspNetCore.AzureAppServices.HostingStartup.deps.json) 中指定的程序集

InvalidOperationException:未指定密钥类型。 Microsoft.AspNetCore.ApiAuthorization.IdentityServer.ConfigureSig

C# Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1] 执行请求时发生未处理的异常

Microsoft.AspNetCore.Routing路由

.NetCore 3.1API 无法加载文件或程序集“Microsoft.AspNetCore.Hosting.Abstractions”

ASP.NET Core 源码阅读笔记 ---Microsoft.AspNetCore.Routing路由