1 回答
TA贡献1772条经验 获得超8个赞
我的理解是,nuget 会查看这些配置文件以下载所需的包,在本例中为 log4net。
NuGet 的工作只是下载包并提取其中的任何内容,至少在 package.config 项目的还原方案中是这样。文件中的targetFramework
属性packages.config
仅由nuget 客户端写入,从不读取。我不知道它的目的或意图是什么。无论如何,我相信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 的引用,它将包含编译器使用的提示路径。如果该提示路径错误,那么您将看到您看到的错误。这在项目在目录结构中移动但不重新安装包时最常见。例如,如果 repo 结构原本是“project\project.csproj”,现在改为“src\project\project.csproj”,则提示路径为“..\packages\log4net.1.2.11\lib\net45\ log4net.dll”是错误的,因为额外的“..\” 需要添加,所以包文件夹的相对路径是正确的。提示路径错误可能还有其他原因,但这是最常见的原因。
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报