C# 项目,编译器抱怨缺少对 log4net 的引用

2024-04-12

我正在使用 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。唯一可疑的是net40-完整在log4net的包路径中找到:”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 vs. 4.61)导致编译错误?

C# 不是我的主要专业领域,但我的理解是 nuget 会查看这些配置文件以下载所需的包,在本例中为 log4net。那为什么下载的是4.0版本而不是4.6.1版本呢?


我的理解是 nuget 会查看这些配置文件来下载所需的包,在本例中为 log4net。

NuGet 的工作只是下载包并提取其中的任何内容,至少在 package.config 项目的恢复场景中是如此。这targetFramework属性中的packages.config文件仅被写入,从未被读取nuget客户端 https://github.com/NuGet/NuGet.Client。我不知道它的目的或意图是什么。无论如何,我相信它的价值targetFramework只是安装包时您的项目正在使用的 .NET Framework。

那为什么下载的是4.0版本而不是4.6.1版本呢?

背景信息,如果您真的不在乎,请跳到下一段。如果您转到 nuget.org 上的包页面,您将在版本历史记录中看到 1.2.11 未显示。但是,如果你查看其他版本的 URL,你可以猜测版本 1.2.11 的 URL https://www.nuget.org/packages/log4net/1.2.11。快速的题外话,Fabio M 很接近,但说该包不再存在并不完全正确。 ”nuget.org 不支持永久删除包。这样做会破坏每个项目,具体取决于包的可用性,尤其是涉及包恢复的构建工作流程。 https://learn.microsoft.com/en-au/nuget/policies/deleting-packages”。在软件包版本页面上,有一条消息说“所有者已取消列出此软件包。这可能意味着该软件包已被弃用或不应再使用”。

回到我的观点,访问此 URL 后,将 nuget.org 中的 n 更改为 f 即可查看fuget.org 上的软件包版本 https://www.fuget.org/packages/log4net/1.2.11。在框架旁边,您可以看到该包支持的框架列表。 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”是错​​误的,因为需要添加额外的“..\”,以便包文件夹的相对路径正确。提示路径错误可能还有其他原因,但这是最常见的原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 项目,编译器抱怨缺少对 log4net 的引用 的相关文章

  • 运行 t4 脚本作为 resx 文件的自定义工具

    我有一个资源文件MyResource resx 我想改变MyResource Designer cs文件生成 我有一个 t4 脚本 它接受 resx 文件作为输入并给出结果转换 但是 我必须手动运行此 t4 才能使其工作 我看到 resx
  • 双线性序列给出奇数结果

    我试图让我的表现技能 不存在 达到标准 但在将公式写入代码时遇到了问题 这是我试图将其引用为 转换 为代码的公式 考虑一个序列 u 其中 u 定义如下 号码u 0 1是第一个u 对于每个x in u then y 2 x 1 and z 3
  • C语言中的递归是如何工作的?

    我试图了解 C 中递归的工作原理 任何人都可以给我解释控制流吗 include
  • C++ 返回值、引用、const 引用

    你能向我解释一下返回值 值引用和值常量引用之间的区别吗 Value Vector2D operator const Vector2D vector this gt x vector x this gt y vector y return t
  • 如何启动异步任务对象

    我想开始收集Task同时处理对象并等待所有对象完成 下面的代码显示了我想要的行为 public class Program class TaskTest private Task createPauseTask int ms works w
  • 使用预编译头减少 clang 编译时间

    我正在开发一个数据库项目 该项目将查询 以某种高级语言表示 编译为 C 代码 这段代码由数据库编译并执行 那部分工作得很好 现在 我正在尝试减少 C 查询代码的编译时间 我想知道是否可以使用预编译头来提高性能 该查询被转换为一个名为 Que
  • 操作/Lambda 表达式内存管理问题

    我将一个操作存储在局部变量中 然后在该局部变量超出范围后使用 使用前是否有被清理的危险 这是一个例子 public List GetMaps Action
  • “包含字符串”的快速索引

    在我的应用程序中 我有多达数百万个短字符串 大部分短于 32 个字符 我想实现一个带有附加列表的搜索框 该列表仅包含包含在搜索框中输入的整个字符串的元素 如何预先建立索引来快速找到此类字符串 所有排序的 STL 容器都会检查整个字符串 对于
  • 在不使用 ncurses 的情况下用 C/C++ 编写“真正的”交互式终端程序,例如 vim、htop...

    不 我不想使用ncurses 因为我想了解如何 终端可以工作 并且我自己编程也很有趣 没有 必须是可移植的 它必须只能在基于 linux xterm 的终端仿真器上工作 我想做的是编写一个交互式终端应用程序 例如 htop 和 vim 我的
  • 无缝滚动瓷砖地图

    我正在开发一个自上而下的角色扮演游戏 并且想要实现无缝滚动地图 也就是说 当玩家探索世界时 地图之间没有加载屏幕 也没有通往下一个区域的 门 我有两种方法可以打破世界 在顶层 我有 区域 它只是 9 个 地图 的集合 这些区域仅由目录表示
  • 使用 size_t 值反向遍历向量

    我想以相反的方向遍历向量的值 如您所知 向量的大小为 size t 当我使用以下代码时 for size t r m size 1 r gt 0 r x r f r for size t c r 1 c lt m size c x r m
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • C++:初始化静态字符串成员

    我在 C 中初始化静态字符串成员时遇到一些问题 我有几个类 每个类都包含几个表示 id 的静态字符串成员 当我通过调用静态函数初始化变量时 一切都很好 但是 当我想为一个变量分配另一个变量的值时 它仍然保留空字符串 这段代码有什么问题 st
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • 捕获另一个进程未处理的异常

    我想知道我是否可以捕获我开始使用 Process Start 的另一个进程抛出的未处理的异常 我知道我可以用这个捕获标准错误link http social msdn microsoft com Forums en US csharpgen
  • 将一个整数从 C 客户端发送到 Java 服务器

    我使用此代码将一个整数从我的 Java 客户端发送到我的 Java 服务器 int n rand nextInt 50 1 DataOutputStream dos new DataOutputStream socket getOutput
  • 使用宏计算源文件行数?

    是否可以使用 C C 预处理器将源文件中的行数计算为宏或某种编译时可用值 例如 我可以更换吗MAGIC1 MAGIC2 and MAGIC3在下面 并在使用时以某种方式获取值 4MAGIC3 MAGIC1 can be placed whe
  • 带有自定义鉴别器的 EntityFramework Code First 继承

    我正在尝试在 EntityFramework Code First 中映射以下继承 public class Member public string ProjectName get set public string AssemblyNa
  • 在 C# WinForms 中预览文档(Word、Excel、PDF、文本文件等)?

    我正在开发一个 C WinForms 应用程序 我希望能够 预览 其中的各种文档类型 也就是说 当用户从列表中选择文件名时 它会在下面以相同的形式显示所选文件的预览 这很像 Outlook 允许您无需双击即可预览选定邮件的方式 有没有什么方
  • 如何在没有 Visual Studio 的情况下将新文件添加到 .csproj 文件

    如何添加新文件到 csproj从命令提示符 我认为没有任何工具可以响应命令行上的 add project 命令来执行此操作 但我认为您可以幸运地创建一个程序 脚本来直接操作 csproj 文件的 XML 内容 csproj 文件的结构如下所

随机推荐

  • 基于原型的 OO 与基于类的 OO 相比有哪些优点?

    为什么基于类的 OO 如此受欢迎 而不是基于原型的 OO 他们在学校教授后者吗 尽管 Javascript 是基于原型的 但大多数人主要是在功能上使用它 或者通过尝试模拟基于类的系统的框架 我知道Sun已经做了一些研究Self http r
  • 游戏开发者的 Flash 性能:本机渲染 VS BitmapData 帧缓冲区

    我开发了一款 2D 射击游戏很多物体 and 激进的滚动 问题 哪种方式更好 选择 1 使用原生 Flash 渲染 从 Bitmap 派生游戏对象 使用现有的 x y 宽度 高度 bitmapData 将所有对象添加为子 UI Compon
  • Win7 上的 ASP.Net 中的 EventLog 权限失败

    我有一个 ASP Net 应用程序 net 3 5 SP1 在 Win7 中运行 在登录过程中 ASP Net 登录控件中的某些内容导致写入事件日志中的安全日志 这听起来对我来说可以接受 问题是该应用程序似乎没有执行此操作的权限 有错误的是
  • LINQ 结果在 for 循环结束时发生变化

    当对数据源执行一组 LINQ 查询时 我使用的是 LINQ to SQL 但这里也只使用List
  • 如何将 docx 转换为 json 以用于 firebase

    我在 Docx 中存储了引号 但我想将其转换为 JSON 因此我不必在 firebase 中手动添加每个单独的引号 这里是 file 这是我的数据库的样子以及我想如何在 firebase 中存储报价的 SS 现在 如何将 docx 文件转换
  • 未捕获的错误:没有模块:用户 Angularjs

    这是这个的后续问题如何使用rails服务器在Angular中获取索引数据 https stackoverflow com questions 18312689 how to fetch index data in angular using
  • Python,在我的 python 代码中出现了意外的关键字参数 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我的 python 代码一直给我这个错误 这是我尝试调用的函数 其下面是调用它的代码 from sys import stdout
  • 等待异步函数在地图内完成

    考虑以下简单的代码 await Promise all arrayOfObjects map async obj gt return await someAsyncFunctionOnObj obj 我的问题是 对象数组 and 对象上的一
  • cocos2d中的水效果

    我想在我的应用程序的背景层上有水效果 该效果不需要对触摸或任何东西做出反应 它只需要稍微晃动图像即可 CCWaves3D 看起来不错 但当我运行它时 边缘周围留下了令人讨厌的黑色伪影 类似CCShaky3D CCLiquid 将我的应用程序
  • 当超过两行时如何纠正 ConstraintLayout TextView 重叠

    我遇到约束布局问题 其中一个文本视图中到达第二行的文本不会向下推被限制在其下方的另一个文本视图 直到该行的中间 我用三个文本视图构建了一个简单的布局 第一个文本视图位于左侧并具有设定的宽度 第二个位于它的右侧 位于它与其父级之间 第三个位于
  • OS X Mavericks 安装 rvm 警告

    在终端中运行时 curl L https get rvm io bash s 它似乎工作正常 但在最后的升级说明中它说 WARNING You have profile file you might want to load it to d
  • 获取 HealthKit 中每个日期的总步数

    获取每天记录的总步数的最佳方法是什么HealthKit 通过 HKSampleQuery 的方法 initWithSampleType 见下文 我可以使用以下命令设置查询的开始和结束日期NSPredicate 但该方法每天返回一个包含许多
  • sqlite 退后一步

    我发现向前滚动结果集的常用方法是使用 sqlite3 step while sqlite3 step statement SQLITE ROW do something with the row 有没有办法向后滚动结果集 例如后退一步或使用
  • 代码签名:我应该签署哪些文件类型以及为什么?

    我有一个全新的代码签名证书 并且一直想知道我应该签署哪些文件 显然 应该对 setup msi 包和所有运行提升的 exe 进行签名 以避免出现 未知发布者 警告 但我应该对其他可执行文件进行签名吗 不需要提升的 exe dll 或 oxc
  • 如何排除 Android Eclipse 项目的“/res”文件夹中的文件

    有什么方法可以排除 res 文件夹下的某些文件不被 Android 构建器处理吗 我有几个使用 Eclipse 构建的 Android 项目 我将这些项目上传到我们的版本控制系统中 问题是 版本控制向每个文件夹添加了一些 project p
  • CSS 自动宽度布局,无边距:auto

    这可以用 css 实现吗 我可以用 javascript 来管理它 它基本上是一个margin auto效果 但我想要每个边距有不同的背景 所以我正在寻找 固定宽度 中心 div 两侧具有自动宽度的 div 如果有意义的话 问题更直观 ht
  • Typescript 限制最大数组长度

    基本上我想要一个最大长度为 4 的数组类型 我很容易无法找到如何在打字稿中实现此检查 有人可以帮我吗 像这样的事情 const a item1 item2 item3 item4 item5 gt array has a maximum l
  • 如何从 python 将无穷大传递给 redis?

    我正在使用 redis py 并希望将 inf 和 inf 与 ZRANGEBYSCORE 一起使用 我尝试使用 inf 的字符串和浮点来执行此操作 但它们返回一个空集 我怎样才能做到这一点 EDIT 我尝试执行以下命令 redis Str
  • iPhone iOS 如何使 UIRotationGestureRecognizer 和 UIPinchGestureRecognizer 一起工作来缩放和旋转带有子视图的 UIView?

    我正在我的应用程序中实现拖 放 调整大小 旋转标签 到目前为止 除了UIRotationGestureRecognizer手势 更具体地说 它不适用于UIPinchGestureRecognizer手势 通常 这两个手势会竞争两个手指触摸
  • C# 项目,编译器抱怨缺少对 log4net 的引用

    我正在使用 Visual Studio 2017 构建一个大型 C 项目 解决方案中有 200 多个项目 在编译其中一个项目时 我遇到了很多错误 如下所示 error CS0012 The type BufferingAppenderSke