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

.NET 8中SystemIdentification.GetSystemIdForPublisher跨项目返回相同ID的问题咨询

.NET 8 WPF中指定SystemIdentification.GetSystemIdForPublisher发布者ID的有效方式

SystemIdentification.GetSystemIdForPublisher的发布者ID生成逻辑依赖可信的发布者身份标识,你之前尝试的配置未生效,大概率是因为未满足.NET 8对发布者身份的验证要求,以下是几种可靠的配置方式:

1. 完整的Authenticode代码签名

仅给程序集加强名称签名无法触发发布者ID的区分,必须使用Authenticode代码签名证书(自签名证书可用于本地测试)对最终的可执行文件或应用包签名:

  • 生成自签名证书(PowerShell命令):
    New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=Your Unique Publisher Name" -CertStoreLocation Cert:\CurrentUser\My
    
  • 签名WPF应用的输出文件(使用signtool.exe):
    signtool sign /f "你的证书路径.pfx" /p "证书密码" "bin\Release\net8.0-windows\YourWpfApp.exe"
    
    签名完成后,同一设备上使用不同证书签名的应用会返回不同的发布者ID。

2. MSIX打包配置发布者身份

如果你的WPF应用采用MSIX打包,发布者ID会直接取自MSIX包的身份配置:

  • 在Package.appxmanifest文件中,修改Identity节点的Publisher属性为唯一值:
    <Identity Name="YourWpfApp" Publisher="CN=Your Distinct Publisher" Version="1.0.0.0" />
    
  • 打包时使用与Publisher匹配的证书签名MSIX包,不同发布者的MSIX应用会生成不同的ID。

3. 注意.NET 8的未签名应用行为

对于未签名、未打包的桌面应用,.NET 8不会将AssemblyCompany或csproj的Company属性作为发布者身份的依据(这些属性无篡改防护),此时GetSystemIdForPublisher会返回基于设备的固定值,导致不同应用得到相同ID。必须通过签名或MSIX打包提供可信的发布者标识。

验证代码

可以用以下代码输出ID字符串,方便对比测试:

var systemId = SystemIdentification.GetSystemIdForPublisher();
if (systemId is not null)
{
    var idHex = BitConverter.ToString(systemId.Id).Replace("-", string.Empty);
    MessageBox.Show($"发布者ID: {idHex}");
}

内容的提问来源于stack exchange,提问作者Abanoub Zak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:32:02