最近遇到C# windows form 的老專案必須使用 smtpclient寄信,但因為MailServer限制使用starttls與587port寄信,使用原來net 的 smtpclient 不能支援此方法,所以必須改用Mailkit組件。
由於原來專案使用.net Framework 4.5.x版本過舊,咬牙升級為 .net Framework 4.7.1。 Mailkit看似搞定,但在建置過程中卻會看到警訊,
Could not load file or assembly 'System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
<1>重新註冊元件
cd d:/project_folder/packages/System.Buffers.4.5.1/lib/netstandard2.0/然後執行
gacutil /i System.Buffers.dll接著回到Visual Studio內的Nuget 套件管理員( package manager console),透過powershell重新安裝套件。
update-package -reinstall
(Version=4.0.2.0
to Version=4.0.3.0
)。
<2>進行重新導向組件版本(Binding Redirect)
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
上述的答案做完之後,因為系統有使用App.Config的關係,在建置完專案後,請記得將有記載對應組件關係的.Config檔案部屬到Production正式環境。筆者為了怕覆蓋正式環境上的組態,自己略過這個檔案,導致一直反覆出現組件不相容錯誤,結果其實是自己犯了低級錯誤而不自知!!!!!
https://stackoverflow.com/questions/63019110/could-not-load-file-or-assembly-system-buffers-version-4-0-2-0