最近同事詢問他們使用 Crytal Report Viewer 時,會發生 log4net 版本衝突的問題。如下圖所示,<br /> <img title="CrystalReportViewer Runtime Error" src="https://rainmakerho.github.io/2018/02/14/2018009/2018009001.png" alt="CrystalReportViewer Runtime Error" /><br /> <br /> 如果是不同版本衝突的話,可以參考&nbsp;<a href="https://dotblogs.com.tw/rainmaker/2015/11/25/153805" target="_blank" rel="nofollow external noopener">如何讓不同 PublicKeyToken 的 DLL assemblyBinding 到可以用版本?</a>&nbsp;透過 assemblyBinding 的方式就可以解決。 但剛好我們的 AP 自已用的 log4net 版本也是 1.2.10.0,所以是&nbsp;<strong>相同版本,不同的 PublickToken</strong>&nbsp;的衝突。 詳細訊息如下,<br /> <br /> <em>沒有辦法解決 “log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821” 和 “log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304” 之間的衝突。<br /> 任意選擇 “log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821”。</em><br /> 有查到&nbsp;<a href="https://stackoverflow.com/questions/11673383/error-could-not-load-log4net-assembly" target="_blank" rel="nofollow external noopener">Error: Could not load log4net assembly</a>&nbsp;似乎是因為不同的平台(x86/x64) 所用的 log4net 會不同。<br /> x86(32位元)用的 PublicToken 是 692fbea5521e1304,x64(64位元)或是 AnyCPU 用的 PublicToken 則是 1b44e1d426115821。<br /> 而我們 ap 平台是 x64 的,但 Crystal Report Viewer 卻使用了 x86(32位元) 的 log4net 。<br /> <br /> 嗯… 我想應該是那裡設定出了錯吧 …<br /> <br /> 跟同事討論後,同事又說只有在某台機器上才會出現那個錯誤,如果是透過 Browser 直接使用系統就正常,透過 VS.NET 啟動程式去 Debug 時,就會出現那個錯誤。<br /> 我想是因為如果透過 Browser 去使用系統的話,是連到 IIS ,而 IIS 設定的是 x64(64位元);如果透過 VS.NET 則是連到 IIS Express,預設它是使用 x86(32位元)。<br /> 於是筆者將 IIS 上的應用程式集區設定成 啟用 32 位元,再執行程式,則一樣會出現 log4net 的衝突狀況(&nbsp; 重現問題了 …^_^)。<br /> 所以就請同事在 VS.NET 中設定讓 IIS Express 使用 64 位元就沒問題了哦!<br /> 工具 -&gt; 選項 -&gt; (search textbox 中輸入 iis) , 並勾選 將 64 位元版本的 IIS Express 用於網站和專案(U) 選項勾起來就可以了哦! 如下,<br /> <img title="將 64 位元版本的 IIS Express 用於網站和專案(U)" src="https://rainmakerho.github.io/2018/02/14/2018009/2018009002.png" alt="將 64 位元版本的 IIS Express 用於網站和專案(U)" /><br /> <br /> 如果您是系統出了錯,請 Check 應用程式集區是否設定成了 「啟用32位元應用程式」哦!