【问题标题】:How to test if a NuGet package works with a lower version of its dependency?如何测试 NuGet 包是否适用于较低版本的依赖项?
【发布时间】:2018-01-13 15:32:24
【问题描述】:

假设我在我的项目中使用 NuGet 包,它依赖于 x.y.z 的 1.2.3 版。但是,我想测试一下 NuGet 包是否适用于 x.y.z 的 1.1.1 版。

我曾尝试以这种方式在我的项目的 App.config 中进行程序集绑定,将 1.1.1 版本放置在 1.2.3 所在的同一目录中。

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
          <assemblyIdentity name="x.y.z" publicKeyToken="xxxx" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-1.2.3 newVersion="1.1.1" />
       </dependentAssembly>
      </assemblyBinding>
</runtime>

但是,我仍然收到此错误:

Could not load file or assembly 'x.y.z, Version=1.2.3, Culture=neutral, 
PublicKeyToken=xxxx' or one of its dependencies. 
The system cannot find the file specified.

有什么想法可以测试 NuGet 包是否适用于较低版本的 dll 吗?

谢谢

【问题讨论】:

    标签: c# .net dependencies nuget assembly-binding-redirect


    【解决方案1】:

    NuGet 是一个依赖管理工具。默认情况下,当您将其安装到项目中时,它将获取任何库的最新版本。在您的示例中,您的项目安装了 x.y.z 的 1.2.3 版本,这意味着它不会像您试图指出的那样找到 1.1.1 版本。

    要使用旧版本进行测试,第一步需要从项目中卸载当前版本的包。您需要转到Package Manager Console 并在您的项目上执行命令Uninstall-Package x.y.z

    完成此操作后,您需要安装要测试的特定版本的 x.y.z。为此,您需要运行Install-Package x.y.z -Version 1.1.1。这将发送到 NuGet,获取 1.1.1 版本的包并安装它,现在您可以运行测试了。请记住,NuGet 存储库需要具有 1.1.1 版本,否则会产生错误。有关托管和可用的版本,请参阅项目 NuGet 页面。

    【讨论】:

    • 由于某种原因我无法卸载该软件包。控制台告诉我,由于原始 NuGet 包依赖于该包,因此无法卸载。
    • 你必须跳依赖舞。您需要先卸载依赖它的包,但该包可能还有另一个依赖于该包的包。因此,您必须演奏的舞蹈。只要继续尝试一次删除一个包,您最终会得到。此外,如果您还没有这样做,请确保 packages.config 已备份或在源代码管理中。以防万一出现严重错误。
    • 我发现了这个问题。我无法加载 dll 的原因是因为我将新版本放入 packages 文件夹而不是 debug 文件夹。谢谢你的时间:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2019-11-27
    • 1970-01-01
    相关资源
    最近更新 更多