Azure Function App 跨函数调用dll免每次重新构建的解决方案咨询
可行解决方案
方案1:将Function1打包为NuGet包,配置自动更新发布流程
- 把Function1的公共逻辑抽离为独立类库项目,每次迭代后打包成NuGet包,推送到私有NuGet源(如Azure Artifacts、内部私有源均可)
- 在Function2的项目文件中配置NuGet包浮动版本规则,示例配置:
<PackageReference Include="Function1公共类库包名" Version="1.*" />
- 配置Function2的CI/CD流水线触发规则:只要Function1的NuGet包有新版本推送,自动触发Function2的构建发布,全程无需人工操作。
方案2:运行时动态加载Function1 DLL
- 将编译好的Function1 DLL上传到统一的固定存储位置,比如Function App对应的共享存储目录
D:\home\site\wwwroot\sharedlibs,或者Azure Blob Storage的固定路径 - 修改Function2的调用逻辑,改为运行时动态加载DLL而非编译时静态引用,C#示例代码片段:
var dllPath = @"D:\home\site\wwwroot\sharedlibs\Function1.dll"; var targetAssembly = Assembly.LoadFrom(dllPath); var targetType = targetAssembly.GetType("Function1.你的目标类名"); var classInstance = Activator.CreateInstance(targetType); var targetMethod = targetType.GetMethod("你的目标方法名"); var result = targetMethod.Invoke(classInstance, new object[] { 方法入参 });
- 每次迭代Function1后,仅需要将新生成的DLL覆盖上传到对应存储位置,重启Function2实例即可生效,无需重新构建发布Function2项目。
注意:动态加载需要提前处理好版本兼容、依赖项冲突问题,建议将Function1的所有依赖DLL也同步放到共享目录下。
方案3:服务调用解耦
- 取消DLL直接引用,改为Function2通过HTTP触发器、队列触发器或者Durable Functions活动函数的方式,直接调用Function1的运行服务
- Function1独立迭代发布即可,完全不需要修改或发布Function2,两个服务完全解耦。
内容的提问来源于stack exchange,提问作者Ukstest
相关产品推荐
相关产品推荐

