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

如何用C# Azure DevOps Git API推送DLL等非文本文件?

如何用C# Azure DevOps Git API推送二进制文件(如DLL)

完全可以实现!问题出在你之前用的RawText内容类型——二进制文件包含大量非文本字符,直接转字符串会破坏数据。正确的做法是把文件内容编码为Base64,然后告诉API用Base64解码还原二进制数据。

这里是修改后的代码,专门处理DLL这类二进制文件:

// 读取二进制文件的原始字节数据
byte[] fileBytes = File.ReadAllBytes(fileNamePath);
// 将字节数组转换为Base64字符串(Azure DevOps API支持的二进制内容格式)
string base64Content = Convert.ToBase64String(fileBytes);

GitCommitRef commit = new GitCommitRef() 
{ 
    Comment = "Add sample DLL file", 
    Changes = new GitChange[] 
    { 
        new GitChange() 
        { 
            ChangeType = VersionControlChangeType.Add, 
            Item = new GitItem() 
            {
                Path = "/TESTFOLDER/" + fileName, 
                GitObjectType = GitObjectType.Blob, 
                IsFolder = false 
            }, 
            NewContent = new ItemContent() 
            { 
                Content = base64Content, 
                ContentType = ItemContentType.Base64Encoded // 关键:改用Base64编码类型
            } 
        } 
    } 
};

关键改动说明:

  • 读取方式:用File.ReadAllBytes直接读取文件的原始字节,避免文本编码(如UTF-8)对二进制数据的损坏
  • 内容编码:把字节数组转成Base64字符串,这是Azure DevOps Git API接受二进制内容的标准格式
  • 内容类型:将ContentType从RawText改为Base64Encoded,明确告诉API需要解码这个字符串来还原二进制文件

额外注意点:

  • 如果是更新已存在的二进制文件,记得把ChangeType改成VersionControlChangeType.Edit
  • 确保你的Azure DevOps个人访问令牌(PAT)拥有Code: Write权限,否则会出现权限不足的错误
  • 对于超大文件(比如几百MB以上),这种单块Base64上传可能会有性能问题,此时可以考虑使用Azure DevOps的分块上传API,但常规大小的DLL用这种方式完全没问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:57:58