#!/bin/bash
# 获取版本号
version=$(grep -o '[^<]*' ThreatSource/ThreatSource.csproj | sed 's/\(.*\)<\/Version>/\1/')
if [ -z "$version" ]; then
echo "Error: Could not find version number in ThreatSource.csproj"
exit 1
fi
# 创建发布目录
package_name="ThreatSource-${version}"
package_dir="publish/${package_name}"
# 清理并创建目录结构
rm -rf "publish/${package_name}"
mkdir -p "${package_dir}/lib"
mkdir -p "${package_dir}/include"
mkdir -p "${package_dir}/doc"
echo "正在编译 Release 版本..."
dotnet build ThreatSource/ThreatSource.csproj -c Release
echo "正在生成文档..."
docfx build docfx.json
./scripts/generate_pdf.sh
echo "正在复制文件..."
# 复制库文件到 lib 目录
cp ThreatSource/bin/Release/net8.0/ThreatSource.dll "${package_dir}/lib/"
cp ThreatSource/bin/Release/net8.0/ThreatSource.xml "${package_dir}/lib/"
cp ThreatSource/bin/Release/net8.0/ThreatSource.deps.json "${package_dir}/lib/"
cp ThreatSource/bin/Release/net8.0/AirTransmission.dll "${package_dir}/lib/"
cp ThreatSource/bin/Release/net8.0/AirTransmission.xml "${package_dir}/lib/"
# 复制文档到 doc 目录
cp "publish/ThreatSource-Library.pdf" "${package_dir}/doc/ThreatSource-API-Doc.pdf"
# 创建 README.txt
cat > "${package_dir}/README.txt" << EOL
威胁源仿真库 v${version}
目录结构:
lib/ 目录:
- ThreatSource.dll - .NET 主库文件
- ThreatSource.xml - .NET API 文档(用于 IDE 智能提示)
- ThreatSource.deps.json - .NET 依赖配置文件
- AirTransmission.dll - 大气传输计算库
- AirTransmission.xml - 大气传输计算库API文档文件
doc/ 目录:
- ThreatSource-API-Doc.pdf - API 文档
使用说明:
1. C#/.NET 项目:
- 将 lib 目录下的所有文件复制到项目目录
- 在 Visual Studio 中添加对 ThreatSource.dll 的引用
2. C++ 项目:
- 将 lib 目录下的所有 DLL 文件复制到程序目录
- 在 Visual Studio 中添加对 ThreatSource.dll 的引用
- 创建 C++/CLI 项目并引用 ThreatSource.dll
详细使用说明请参考 doc 目录下的 API 文档。
EOL
# 创建最终的 zip 包
cd publish
zip -r "${package_name}.zip" "${package_name}"
# 清理临时目录
rm -rf "${package_name}"
echo "打包完成:publish/${package_name}.zip"