Dot-Net

將 bindingRedirect 添加到 .Net 標準庫

  • September 8, 2017

我有一個 .Net 標準庫,在嘗試使用其中一個依賴庫時出現錯誤,我認為這是由於版本衝突。在舊式 .Net 類庫中,我可能會添加如下內容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <runtime>
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <dependentAssembly>
       <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
       <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
     </dependentAssembly>
   </assemblyBinding>
 </runtime>
</configuration>

但是,我顯然不能在 Net Standard 庫中做到這一點。所以,我的問題是,在 .Net 標準世界中解決此類問題的策略是什麼?

綁定重定向是一個 .NET 框架概念,在 .NET Standard 和 .NET Core 上沒有綁定重定向。

但是,應用程序(實際的 .NET Framework 或 .NET Core 應用程序)需要解析要使用的文件。在 .NET Core 上,這是通過deps.json基於建構輸入生成文件來完成的,並且 .NET Framework 應用程序使用綁定重定向。

如果需要綁定重定向,則必須將它們添加到使用 .NET Standard 庫的 .NET Framework 應用程序(或庫)中。

這些綁定重定向可以配置為在建構期間根據編譯期間使用的程序集自動生成,請參閱有關自動綁定重定向的文件。在使用 NuGet 使用 NuGet 包的新PackageReference風格時,這是自動完成的。由於正確配置此內容因項目類型而異,請參閱公告Issues with .NET Framework & NuGet 的 .NET Standard 2.0 以獲得詳細說明。

確保使用正確的綁定重定向的最簡單方法是確保 .NET Framework 應用程序或庫設置這些屬性(在 csproj/vbproj 內。生成 .exe 執行檔但單元需要的項目不需要第二種方法)測試項目):

<PropertyGroup>
   <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
   <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

引用自:https://stackoverflow.com/questions/46111749