簡體   English   中英

C#項目,編譯器抱怨缺少對log4net的引用

[英]C# project, compiler complaining missing reference to log4net

我正在使用Visual Studio 2017構建一個大型C#項目(解決方案中有200多個項目)。 編譯其中一個項目時,出現很多錯誤,如下所示:

error CS0012: The type 'BufferingAppenderSkeleton' is defined in an assembly that is not referenced. You must add a reference to assembly 'log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=1b44e1d426115821'.

但是,該項目確實引用了log4net 1.2.11。 唯一可疑的是在log4net的軟件包路徑中找到的net40-full :“ C:\\ XXXX \\ Src \\ packages \\ log4net.1.2.11 \\ lib \\ net40-full \\ log4net.dll

在項目的package.config中,它包含以下行:

<package id="log4net" version="1.2.11" targetFramework="net461" />

在其app.config中,包含以下行:

      <dependentAssembly>
    <assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-1.2.11.0" newVersion="1.2.11.0"/>
  </dependentAssembly>

我想知道是否是導致編譯錯誤的.net版本(4.0與4.61)不匹配?

C#不是我的主要專長,但我的理解是nuget會查看這些配置文件以下載所需的軟件包,在這種情況下為log4net。 那么它是怎么下載4.0版本而不是4.6.1版本的呢?

我的理解是nuget會查看這些配置文件以下載所需的軟件包,在這種情況下為log4net。

NuGet的工作僅僅是下載軟件包並提取其中的所有內容,至少在package.config項目的還原方案中。 packages.config文件中的targetFramework屬性僅被寫入, 而nuget client從未讀取。 我不知道它的目的是什么。 無論如何,我相信targetFramework的價值只是安裝軟件包時項目使用的.NET Framework。

那么它是怎么下載4.0版本而不是4.6.1版本的呢?

背景信息,如果您真的不在乎,請跳至下一段。 如果轉到nuget.org上的軟件包頁面,您會在版本歷史記錄中看到未顯示1.2.11。 但是,如果您查看其他版本的URL,則可以猜到版本1.2.11的URL 快速的脫口而出的評論,Fabio M很接近,但是說這個軟件包已經不存在了,這不是很正確。 nuget.org不支持永久刪除軟件包。這樣做會破壞每個項目,具體取決於軟件包的可用性,尤其是涉及涉及軟件包還原的構建工作流時。 在軟件包版本頁面上,顯示一條消息,“所有者已取消列出此軟件包。這可能意味着該軟件包已被棄用或不再使用”。

回到我的觀點,一旦您到達此URL,就在nuget.org中將n更改為f以查看fuget.org上的軟件包版本 在框架旁邊,您可以看到軟件包支持的框架列表。 net40是程序包支持的最高版本。

因此,NuGet之所以“下載4.0版本”,是因為那是nuget軟件包提供的與您的項目兼容的最接近的版本。 .NET通常被認為是向前兼容的,因此net45二進制文件可以在net462運行時上運行,因此當您的項目使用較新版本時,通常可以使用net45二進制文件。

最后,關於錯誤的信息,正如我在第一段中提到的,在packages.config項目中,nuget的工作就是下載並解壓縮軟件包。 在安裝時,它將向csproj添加一些信息,以便編譯器可以嘗試查找dll。 因此,如果您查看csproj,則應該找到對log4net.dll的引用,它將包含編譯器使用的提示路徑。 如果該提示路徑錯誤,那么您將看到錯誤。 當項目在目錄結構中移動但不重新安裝軟件包時,這是最常見的。 例如,如果存儲庫結構最初是“ project \\ project.csproj”,並且已更改為“ src \\ project \\ project.csproj”,則提示路徑為“ .. \\ packages \\ log4net.1.2.11 \\ lib \\ net45 \\ “ log4net.dll”是錯​​誤的,因為需要添加一個附加的“ .. \\”,以便packages文件夾的相對路徑正確。 提示路徑錯誤可能還有其他原因,但這是最常見的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM