1、先将强命名的外部程序集注册到GAC(此处有坑,后面再说)
先在数据库上找到gacutil.exe,然后用管理员身份打开命令提示符,并CD到程序集的位置,执行以下命令
"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\gacutil.exe" -i QRCoder.dll
"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\gacutil.exe" -i QRCoderImageToByteArray.dll
2、在报表中使用外部程序集
打开报表,打开工具栏的 报表——报表属性,引用GAC里的程序集,并添加自定义代码
然后在报表中添加图片控件,设置图片控件的来源为数据库,
=Code.QRCoderByteArray(Fields!LeadId.Value + "," + Fields!FullName.Value +"," +Fields!new_age.Value)
然后就可以使用了
处理过程中遇到的坑:
1、开发环境是有gacutil.exe的,但是生产环境没有安装.net Framework和Microsoft Sdk,所以没有gacutil.exe注册Gac
后来通过第三方的PowerShell Gac扩展解决,https://github.com/LTruijens/powershell-gac
下载后找到Gac文件夹,打开PowerShell,通过$env:PSModulePath查找PS路径,并将Gac文件夹放到默认路径中,并执行Import-Module GAC,成功安装扩展
然后在PowerShell里面执行Add-GacAssembly C:\SignedPartiallyTrustedDLLs\QRCoder.dll 将相应的dll添加到Gac
2、reporting service支持的.net framework是2.0,3.5,而SQL Data Tool支持的是4.0,所以如果程序集是4.0的,会出现在SQL Data Tool中使用正常,但没法注册到CRM中的问题
本来想通过把代码编译成framework 3.5的,但是代码的语法全是4.0的(主要是字符串都是用的$),尝试失败
3、费了好大功夫,在Nuget里面找到了低版本的dll,但是发现是没有强签名的
通过在Nuget中安装了Brutal.Dev.StrongNameSigner强制签名解决,然后将相关联的dll也通过代码重新编译为3.5的,并将这两个dll重新添加到GAC
至此,终于完成