背景信息客户新建了一个Azure function应用,引用设计好的report,然后生成html或者pdf提供给前端使用。现在在测试报表生成的时候遇到了license的异常,会提示
环境是vs2019,dotnet core3.1
问题产生原因:
AR 的License机制是,没有引用核心的dll,不会触发License检测和生成,因为 AR 只有在引用核心的dll时候才会触发License,核心Dll
执行步骤:
1. 在路径:C:\ProgramData\GrapeCity\gclm 的gclm.exe中打开 cmd.exe 程序,在路径中直接输入cmd
2. 执行命令gclm e88c1aa3-2781-44bb-b639-765c9ef6d15c -lc .\.gclicx func.ActiveReport.dll命令
这里 func是EntryAssembly的名字,在用户场景下,其实是AzureFunction的入口Assembly
这里的ActiveReports,是用户工程输出Assembly的名字
3. 然后将生成的 .gclx 文件拷贝到项目路径下,并设置属性为嵌入资源
此时可以正常编译过项目
4. 发布项目时候仍然会报License相关问题
此处仅支持本地Build好了通过WebDeploy的方式上传到AzureFunction,如果希望通过上传代码,靠Azure的Kudu自己编译
或者采用如下方案:
看到用户开发Azure Function App的方式是“代码+测试”,在这个环境中EntryAssembly的Name不是Func.dll而是“Microsoft.Azure.WebJobs.Script.WebHost”。
所以生成.gclicx文件的命令行要改作:
gclm e88c1aa3-2781-44bb-b639-765c9ef6d15c -lc .\.gclicx Microsoft.Azure.WebJobs.Script.WebHost.ActiveReport.dll
如果用户使用了其他部署方式,导致EntryAssembly发生了变化,可以用以下代码在AzureFunction中查看EntryAssembly的Name并替换gclm命令行中的参数。
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
return new OkObjectResult(System.Reflection.Assembly.GetEntryAssembly().GetName().Name.ToString());
}
如果用户要支持多种部署方式,导致EntryAssembly的Name可能在不同环境下不一致,可以为每个环境生成一份.gclicx文件,分别改名成1.gclicx/2.gclicx/3.gclicx,同时打包到当前工程的EmbededResource里。
|