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
至此,終於完成
