You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET6.0启用PublishTrimmed后ITfoxtec SAML2.0报NullReferenceException

解决.NET6中启用PublishTrimmed后ITfoxtec SAML2库的NullReferenceException问题

启用PublishTrimmed后出现空引用错误,本质是.NET修剪器误删了ITfoxtec SAML2库内部依赖的反射或动态调用代码——尤其是签名流程里的核心类型,最终导致SignData这类方法执行时找不到所需实例。以下是不用移除PublishTrimmed标签的解决办法:

方法1:添加修剪保留配置文件

  1. 在项目根目录新建link.xml文件,设置文件属性为始终复制,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<linker>
  <assembly fullname="ITfoxtec.Identity.Saml2">
    <type fullname="ITfoxtec.Identity.Saml2.Cryptography.Saml2SignedText" preserve="all" />
    <type fullname="ITfoxtec.Identity.Saml2.Saml2RedirectBinding" preserve="all" />
    <!-- 若后续仍有其他修剪问题,可添加更多ITfoxtec库的相关类型 -->
  </assembly>
</linker>
  1. 在项目的.csproj文件中添加引用:
<ItemGroup>
  <TrimmerRootDescriptor Include="link.xml" />
</ItemGroup>

方法2:直接在.csproj中配置保留规则

无需额外文件,直接在项目文件里指定保留整个ITfoxtec SAML2程序集:

<PropertyGroup>
  <PublishTrimmed>true</PublishTrimmed>
  <TrimMode>partial</TrimMode> <!-- 显式设置部分修剪模式,避免过度修剪 -->
</PropertyGroup>

<ItemGroup>
  <TrimmerRootAssembly Include="ITfoxtec.Identity.Saml2" />
</ItemGroup>

方法3:用特性标记动态依赖

如果能精准定位被修剪的类型,可在自己的业务代码(比如SamlController)上添加特性,告诉修剪器保留相关类型:

using System.Diagnostics.CodeAnalysis;

[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(ITfoxtec.Identity.Saml2.Cryptography.Saml2SignedText))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(ITfoxtec.Identity.Saml2.Saml2RedirectBinding))]
public class SamlController : Controller
{
    // 你的控制器逻辑代码
}

完成配置后重新发布项目,测试SAML登录流程,确认空引用错误是否消除。

内容的提问来源于stack exchange,提问作者Mad hatter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:38:30