尝试使用HeaderNames时。XFrameOptions,我发现它在我的一个项目中有效,在另一个项目则失败。两者都是目标。NET 6。
在我的应用程序中,我需要使用X-Frame-Options HTTP标头。在可能的情况下,出于可维护性的原因,我会尽量避免自己为这些标准字符串指定常量,而是依靠标准常量。对于此标头的名称,有
HeaderNames.XFrameOptions
,自ASP。NET Core 3.0。
通过在VS中导航到该类的实现,我发现它工作的项目使用的是微软的6.0.0.0版本(.NET 6,x64)。网Http。收割台装配:
C: \Program Files\dotnet\shared\Microsoft。AspNetCore。应用程序\6.0.12\Microsoft.Net.Http.Headers.dll
不起作用的项目使用程序集的2.2.0.0版本(.NET Standard 2.0,MSIL):
C: \Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.net.http.headers\2.2.0\lib\netstandard2.0\microsoft.net.http.headers.dll
工作项目是我的控制台应用程序的主项目,而损坏的项目是同一解决方案中的一个库,由控制台应用程序直接引用。
当我查看这个坏项目的obj\project.assets.json时,我发现了微软。网Http。头在2.2.0版本中确实使用过
referenced by Microsoft.AspNetCore.Http.Extensions/2.2.0
,也用于已损坏的项目中。
我用这些信息重现了失败:
dotnet new globaljson --sdk-version 6.0.404 --roll-forward disable
dotnet new console -f net6.0
dotnet add package Microsoft.AspNetCore.Http.Extensions --version 2.2.0
echo "Console.WriteLine(Microsoft.Net.Http.Headers.HeaderNames.XFrameOptions);" > Program.cs
dotnet run
C: \Repos\游乐场\Program.cs(1,58):错误CS0117:“HeaderNames”不包含“XFrameOptions”的定义[C:\Repos\操场\游乐场.csproj]
生成失败。修复生成错误,然后重新运行。
我尝试将工作项目引用的所有包添加到repo项目中,它修复了它!通过消除并遵循最后一个剩余项目的依赖项,我发现只需添加一个包就可以实现修复(
AspNetCore.HealthChecks.UI.Client/6.0.5
):
dotnet add package AspNetCore.HealthChecks.UI.Client --version 6.0.5
dotnet run
X-Frame-Options
我看到了AspNetCore。健康检查。UI。客户端引用Microsoft。网Http。标头程序集版本6.0.0.0,但直接作为程序集,而不是作为NuGet包。遗憾的是,最新的打包版本是2.2.0.0。
如何制作HeaderNames。XFrameOptions同时适用于我的两个项目?
正在安装一个不相关的包,如AspNetCore。健康检查。UI。客户是唯一的解决方案吗?有没有更直接的方法来诊断此类组装解决问题?