源码交付清单:做完一个项目,你到底该从开发商手里拿到什么

很多团队在验收软件时,只确认"能打开、能点",然后开发商甩过来一个 setup.exe 或一个小程序二维码,这事就算完了。但exe / 二维码只是结果,真正决定你后续能不能改、能不能维护、出事能不能追责的,是它背后那一整套资产。

我做了多年 .NET 桌面端,也接小程序和 APP,下面这份跨平台交付清单,建议收藏,验收时逐条对。

桌面端(WPF / WinForms)必交 6 样

  1. 可安装包 / 自包含发布目录(不是散落 dll);
  2. 完整源码(.csproj/.sln + 依赖清单);
  3. 数据库脚本(建表 / 初始数据 / 迁移);
  4. 配置与密钥(appsettings.json、串口参数、接口地址,密钥用占位符);
  5. 操作文档 + 部署文档;
  6. 授权 / 激活说明(按机器授权要把规则讲清)。

交付前必跑的自包含发布:

bash 复制代码
dotnet publish -c Release -r win-x64 --self-contained true `
  -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true

验收"缺件自检"小工具:

csharp 复制代码
static readonly string[] Required = { "src", "db", "doc", "appsettings.json" };
public static void Check(string root)
{
    var miss = Required.Where(r =>
        !Directory.Exists(Path.Combine(root, r)) &&
        !File.Exists(Path.Combine(root, r))).ToList();
    Console.WriteLine(miss.Any() ? "缺:" + string.Join(",", miss) : "✅ 齐全");
}

小程序必交 6 样

  1. 前端源码(pages/、app.js、app.json,开发者工具能完整打开);
  2. 后端源码 + 部署说明(code2session、订阅消息、支付 v3 服务端);
  3. 已备案 HTTPS 域名(配进「服务器域名 → request 合法域名」);
  4. 管理员账号 + AppID(不移交,你永远是使用者);
  5. 微信支付商户号 + 证书(涉及支付时);
  6. 类目资质 + 小程序 ICP 备案。

后端换 openid 核心:

csharp 复制代码
public async Task<string> Code2OpenId(string code)
{
    var url = $"https://api.weixin.qq.com/sns/jscode2session" +
              $"?appid={AppId}&secret={AppSecret}&js_code={code}&grant_type=authorization_code";
    var j = await _http.GetFromJsonAsync<JsonNode>(url);
    return j["openid"]?.GetValue<string>();
}

APP 必交 6 样

  1. 完整源码(Android / iOS / MAUI / Flutter 工程);
  2. 签名密钥 (Android keystore 丢了就无法更新,必须当面移交改密);
  3. 软著证书(国内商店上架强制);
  4. 应用商店开发者账号;
  5. 隐私政策 + SDK 清单(各商店强制);
  6. ICP / 公安备案。
gradle 复制代码
android {
    signingConfigs {
        release {
            storeFile file("release.keystore")
            storePassword "******"   // 交接时务必改掉
            keyAlias "myapp"
            keyPassword "******"
        }
    }
    buildTypes { release { signingConfig signingConfigs.release } }
}

通用清单(直接抄)

类别 桌面端 小程序 APP
产物 安装包 已发布小程序 上架包
源码 完整工程 前端+后端 工程+签名密钥
数据 脚本 表结构 表结构
账号 --- 管理员+AppID 开发者账号
资质 --- 类目+备案 软著+备案+隐私
文档 部署+操作 部署+接口 上架+隐私

怎么判断给的是真源码还是假源码

清单对了还要防"假源码"------能打开但编译不过、缺依赖、缺迁移脚本,等于没给。三个实招:

  1. 清环境重编译 :在一台只装 SDK、没装第三方工具的干净机器上,源码 dotnet build / npm install && build 一遍,跑不通就是缺东西。
  2. 对照构建来源:让开发商提供 exe / 小程序的构建提交号(git commit / tag),你能从同一份源码构建出功能一致的结果,才叫源码对应成品。
  3. 抽查迁移脚本:新建空库跑他的建表 + 初始数据脚本,能还原出你正在用的数据结构,才算数据可延续。
csharp 复制代码
// 真源码的一个特征:版本号可从源码查到,对得上你拿到的 exe
var v = System.Reflection.Assembly.GetExecutingAssembly()
            .GetName().Version.ToString();
Console.WriteLine("源码版本:" + v);

几个常见套路

  • "源码涉及核心技术不能给"------买断定制开发的源码版权归甲方,这是合同范畴,不是技术范畴;
  • "你拿源码也看不懂"------看不懂可以找人接手,前提是你得有;
  • "先给 exe 用着,源码以后给"------以后往往就是没有以后。

把这份清单写进合同附件,比任何口头承诺都管用。

补充一句:源码交付和"开源"是两回事。你买断的是使用权 + 源码归属,不需要对方公开代码,但对方必须保证你能在自己手里重新构建、修改、找人接手。这一点写清楚,后续才不会被"核心技术"四个字拿捏。

验收与售后边界

验收以"清单逐项勾"为准,别口头"能用就行";售后写进合同:源码交付 ≠ 终身免费改,通常 1--3 个月免费 bug 修复,需求新增另算。

如果你是甲方、正在验收却只拿到一个 exe,或者手里有半成品想找人兜底,欢迎在评论区交流,或站内私信我帮你判断哪些东西本该是你的。关注我,后续聊更多"接单 / 交付 / 上架"的实踩经验。

相关推荐
明月_清风1 小时前
数据处理完放在哪里?一文搞懂数据仓库与数据湖
大数据·后端·数据分析
据说幸运很容易1 小时前
TestNG 分组接入现有框架:实现、踩坑与解法
后端·架构
IT_陈寒1 小时前
我的JavaScript代码为啥在forEach里没按预期执行?
前端·人工智能·后端
136096757231 小时前
1Panel 部署 ThinkPHP8 踩坑实录
后端
thissai1 小时前
Laravel 12 日志配置详解:config/logging.php 逐项说明
后端
mldong1 小时前
引擎里没有 setStatus:状态迁移收口,不用状态机框架
后端·架构
程序猿DD1 小时前
OctaFuse Gateway 2.12.0:供应商账号管理、路由工作区与多模态入口发现
后端
她的男孩1 小时前
开放接口限流从 20 改到 200 还是每分钟 20 次:拆完防重放+幂等+限流,我找到 5 个静默失效的坑
java·后端·架构
lizhongxuan1 小时前
Agent Sandbox 怎么选
后端