macOS下VS Code搭建分仓持久化库与Azure Function项目方案问询
跨GitHub仓库的项目结构方案(持久化库+Azure Function)
一、持久化库独立仓库(示例命名:MyProject.Persistence)
这个仓库仅存放持久化相关代码与NuGet发布配置,结构如下:
MyProject.Persistence/ ├── src/ │ ├── MyProject.Persistence.csproj # 类库项目文件,配置NuGet包元数据 │ ├── Repositories/ # 仓储实现代码 │ ├── Models/ # 实体模型类 │ └── DbContexts/ # EF Core上下文等核心逻辑 ├── .github/ │ └── workflows/ │ └── nuget-publish.yml # GitHub Actions工作流,自动发布私有NuGet包 ├── README.md └── .gitignore
- 项目文件
MyProject.Persistence.csproj需配置包ID、版本、作者等元数据,同时开启<GeneratePackageOnBuild>true</GeneratePackageOnBuild>以生成NuGet包 - GitHub Actions工作流可设置为:代码打版本tag或合并到主分支时,自动将包发布到GitHub Packages私有NuGet源
二、Azure Function独立仓库(示例命名:MyProject.Functions)
这个仓库存放Azure Function业务代码,同时区分开发阶段与发布阶段的依赖方式,结构如下:
MyProject.Functions/ ├── src/ │ ├── MyProject.Functions.csproj # Function项目文件 │ ├── Functions/ # 具体Function实现 │ ├── local.settings.json # 本地开发配置 │ └── appsettings.json # 生产环境配置 ├── .github/ │ └── workflows/ │ └── function-deploy.yml # GitHub Actions工作流,部署到Azure ├── Directory.Build.props # 可选,用于环境切换依赖方式 └── .gitignore
核心配置区分
开发阶段:联动更新库与Function
- 本地开发时,将两个仓库放在同一父目录下,在Function项目文件中直接引用持久化库的本地项目,实现实时调试更新:
<ItemGroup> <ProjectReference Include="../MyProject.Persistence/src/MyProject.Persistence.csproj" /> </ItemGroup> - 也可通过
Directory.Build.props做条件切换,避免手动修改项目文件:<Project> <PropertyGroup> <LocalDevelopment>true</LocalDevelopment> <!-- 本地设为true,发布时改为false --> </PropertyGroup> <ItemGroup Condition=" '$(LocalDevelopment)' == 'true' "> <ProjectReference Include="../MyProject.Persistence/src/MyProject.Persistence.csproj" /> </ItemGroup> <ItemGroup Condition=" '$(LocalDevelopment)' == 'false' "> <PackageReference Include="MyProject.Persistence" Version="x.y.z" /> </ItemGroup> </Project>
- 本地开发时,将两个仓库放在同一父目录下,在Function项目文件中直接引用持久化库的本地项目,实现实时调试更新:
发布阶段:依赖私有NuGet包
- 发布前确保持久化库已发布到GitHub Packages私有源
- 将Function项目文件切换为NuGet包引用:
<ItemGroup> <PackageReference Include="MyProject.Persistence" Version="1.0.0" /> </ItemGroup> - 在部署流程中配置NuGet源指向GitHub Packages私有源(可通过
NuGet.Config或GitHub Actions环境变量设置),确保部署时能拉取到私有包
三、核心规则
- 两个仓库完全独立,各自管理代码提交与版本迭代
- 开发阶段靠本地项目引用联动调试,发布阶段严格依赖正式版本的NuGet包
- 持久化库版本遵循语义化版本规范,每次发布新包对应打一个Git版本tag
内容的提问来源于stack exchange,提问作者lcj
相关产品推荐
相关产品推荐

