我有一個曾經運行良好的天藍色網路作業。當我添加我作業的公司的內部 nuget 并使用它時,我收到以下錯誤:
Could not load file or assembly 'System.Threading.Tasks.Dataflow, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.
奇怪的是,內部 nuget 和之前在該專案中默認存在的 nuget 都使用 System.Threading.Tasks.Dataflow,Version=5.0.0.0

uj5u.com熱心網友回復:
當 .NET 首次創建時,僅適用于 Windows 的 .NET 框架,它有一個稱為“強命名”的概念,它使程式集版本成為程式集標識的一部分(不僅僅是名稱,還包括公鑰)。對于 .NET Framework,當 A.dll 參考 B.dll 時,在運行時 B.dll 的版本必須與編譯 A.dll 的版本相匹配。解決這個問題的方法是在 app.config 或 web.config 檔案中使用系結重定向。
使用 .NET Core,他們不再強制執行此操作,但他們仍然進行檢查以確保在磁盤上找到的程式集是比編譯時參考更高的版本。
這是相關的,因為您使用的是面向 .NET 3.1 的 Microsoft.NET.Sdk.Functions 版本 3.0.13。因此,我假設您的 Azure Functions 應用在 .NET Core 3.1 上運行。我不知道 .NET 3.1 運行時附帶的 System.Threading.Tasks.Dataflow 的程式集版本是什么,但我希望它是版本 3.something。
雖然 NuGet 包版本不必匹配程式集版本,但主要(有時是次要)版本通常匹配,尤其是對于 System.* 包/程式集。
將 2 2 放在一起,您在 .NET Core 3.1 上運行,它具有 System.Threading.Tasks.Dataflow.dll 版本 3.something,但您的 something.Kafka.dll 程式集是針對 System.Threading.Tasks.Dataflow 編譯的.dll 版本 5.something。由于編譯時參考是運行時可用版本的更高版本,.NET 程式集加載器拒絕使用它。
現在有兩件可操作的事情。
首先,您可以做三件事之一來修復您的專案。使用面向 .NET 5 或更高版本的較新版本的 Azure Functions。或者,使用不依賴于比 .NET Core 3.1 運行時提供的版本更高的 BCL(基類別庫)程式集的whatever.Kafka 包的舊版本。最后,我猜你專案的 bin 目錄中不存在 dll 的原因是因為這個問題:https : //github.com/Azure/azure-functions-host/issues/5894
其次,聯系這個 Kafka 包的包所有者,并告知他們不需要使用 Dataflow NuGet 包。.NET Core 1.0 已將其內置到 BCL 中,因此僅 .NET Standard 和 .NET Framework 專案需要該包。如果這個 Kafka 包確實支持 .NET Framework 或 .NET Standard,那么如果他們將 PackageReference 更改為包含Condition=" '$(TargetFrameworkIdentifier) != '.NETCoreApp' ",則該包將僅用于 .NET Framework 和 .NET Standard,而該包的 BCL 版本將用于 .NET Core 和 .NET 5 及更高版本。如果他們使用任何其他 System.* 包(在運行時中提供),他們也應該這樣做。當然,如果包所有者拒絕將 Dataflow 作為包依賴項洗掉,或者如果有其他包將 Dataflow 作為傳遞包引入,那么你就會陷入困境。但是通過通知 Kafka 包所有者這一點,他們至少有機會改進他們的包。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/406532.html
標籤:
