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

.NET Core 2.2 API调用SharePointOnline CSOM报“无程序包标识”错误

解决.NET Core 2.2调用SharePoint CSOM时的0x80073D54异常

这个问题我之前帮不少开发者排查过,0x80073D54(进程没有包标识)的本质是SharePoint CSOM在.NET Core环境下误触发了UWP应用的身份校验逻辑——毕竟CSOM最初是为.NET Framework设计的,在跨平台/非桌面服务器环境下存在兼容性盲区。结合你的场景,我整理了几个针对性的解决方案:

1. 升级CSOM包到.NET Core兼容版本

旧版本的Microsoft.SharePointOnline.CSOM是基于.NET Framework开发的,在.NET Core环境下会调用一些仅UWP支持的API,从而抛出这个异常。你需要:

  • 卸载当前的CSOM包
  • 安装支持.NET Standard 2.0及以上的最新版CSOM(推荐版本:16.0.24119.12000+),这些版本专门修复了.NET Core环境下的身份认证逻辑问题。

2. 修正异步调用的方式

你当前用.Wait()同步阻塞异步方法,这不仅容易导致死锁,还会放大CSOM的兼容性问题。请将代码改为标准的async/await模式:

修改SharePointHelper类的方法:

using Microsoft.SharePoint.Client;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace SharePointHelper
{
    public class SharePointHelper
    {
        public SharePointHelper()
        {
        }

        // 改为async Task方法
        public async Task WriteFilesAndFoldersAsync(string siteUrl, string listName, string username, string password)
        {
            using (var context = new ClientContext(siteUrl))
            {
                context.Credentials = new SharePointOnlineCredentials(username, password);
                var folder = context.Web.GetFolderByServerRelativeUrl(listName);
                var subFolders = folder.Folders;
                var files = folder.Files;
                context.Load(folder);
                context.Load(subFolders);
                context.Load(files);
                
                if (context.HasPendingRequest)
                    await context.ExecuteQueryAsync(); // 用await替代.Wait()
                
                PrintValues(subFolders.GetEnumerator());
                PrintValues(files.GetEnumerator());
            }
        }

        private void PrintValues(IEnumerator<Folder> enumerator)
        {
            while (enumerator.MoveNext())
                Console.WriteLine(enumerator.Current.Name);
        }

        private void PrintValues(IEnumerator<File> enumerator)
        {
            while (enumerator.MoveNext())
                Console.WriteLine(enumerator.Current.Name);
        }
    }
}

修改API调用代码:

// 同样改为async Task方法
public async Task SharePointTestAsync()
{
    string siteUrl = @"https://somecompany.sharepoint.com/sites/Test";
    string listName = "Documents";
    string username = "myemail@somecompany.com";
    string password = "mypassword";
    var sharePointHelper = new SharePointHelper.SharePointHelper();
    await sharePointHelper.WriteFilesAndFoldersAsync(siteUrl, listName, username, password);
}

3. 替换为更兼容的认证方式

如果升级包和调整异步模式后仍有问题,建议放弃SharePointOnlineCredentials,改用Azure AD应用权限认证,配合PnP Framework(对.NET Core支持更完善):

  1. 安装PnP.Framework NuGet包
  2. 修改代码使用应用身份认证:
using PnP.Framework;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace SharePointHelper
{
    public class SharePointHelper
    {
        public async Task WriteFilesAndFoldersAsync(string siteUrl, string listName, string clientId, string clientSecret)
        {
            // 使用PnP的AuthenticationManager创建上下文
            using (var context = await new AuthenticationManager().GetACSAppContextAsync(siteUrl, clientId, clientSecret))
            {
                var folder = context.Web.GetFolderByServerRelativeUrl(listName);
                var subFolders = folder.Folders;
                var files = folder.Files;
                context.Load(folder);
                context.Load(subFolders);
                context.Load(files);
                
                await context.ExecuteQueryAsync();
                
                PrintValues(subFolders.GetEnumerator());
                PrintValues(files.GetEnumerator());
            }
        }

        // 打印方法不变...
    }
}

这种方式不需要用户名密码,而是通过Azure AD应用的客户端ID和密钥进行认证,更适合服务器端场景,彻底规避了SharePointOnlineCredentials的兼容性问题。

4. 检查服务器环境配置

确保Windows Server 2012 R2满足以下条件:

  • 安装了最新的.NET Core 2.2 Runtime补丁(注意:.NET Core 2.2已停止官方支持,若长期维护建议升级到.NET 6+)
  • 安装了所有必要的Windows更新,尤其是与UWP底层组件相关的补丁(CSOM可能依赖这些组件的基础库)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:48:31