如何停止ServiceStack 3.9.71 NuGet包安装ServiceStack.Text 4.0.24?

Dyl*_*tie 3 licensing nuget servicestack servicestack-text nuget-package-restore

我有一个使用ServiceStack的项目; 我们运行旧的3.9.x代码库而不是升级到4.x,因为ServiceStack 4需要商业许可证.

我自己的API客户端在.nuspec文件中定义了依赖关系,如下所示:

<dependencies>
  <dependency id="DotNetOpenAuth.OAuth2.Client" version="[4.3,5)" />
  <dependency id="log4net" version="[2.0,2.1)" />
  <dependency id="ServiceStack" version="[3.9.71,4)" />
</dependencies>
Run Code Online (Sandbox Code Playgroud)

问题是 - ServiceStack包依赖于ServiceStack框架的各个其他位,安装ServiceStack 3.9.71正在将ServiceStack.Text v4.0.24 安装到我的项目中.它确实弹出了需要许可证接受的对话框,这让我想到了一些奇怪的事情 - 但是没有为其他所需的ServiceStack组件手动定义我自己的依赖项,我怎样才能确保我不会结束在我的项目中使用未经许可的ServiceStack 4.x?

Mat*_*ard 7

在.nuspec中显式显示ServiceStack.Text依赖项,并将其放在ServiceStack依赖项之前.

<dependencies>
  <dependency id="DotNetOpenAuth.OAuth2.Client" version="[4.3,5)" />
  <dependency id="log4net" version="[2.0,2.1)" />
  <dependency id="ServiceStack.Text" version="[3.9.71,4)" />
  <dependency id="ServiceStack" version="[3.9.71,4)" />
</dependencies>
Run Code Online (Sandbox Code Playgroud)

这将强制NuGet使用约束解析ServiceStack.Text.

使用版本范围[3.9.71,4]安装ServiceStack的问题是NuGet将ServiceStack.Common依赖项解析为ServiceStack.Common的最低兼容版本,它确定版本为3.9.11.ServiceStack.Common 3.9.11没有为ServiceStack.Text指定依赖范围,因此NuGet安装了4.0版本.更高版本的ServiceStack.Common确实有ServiceStack.Text包的范围,但旧版本没有.因此,如果没有使依赖项显式或者更改ServiceStack.Text NuGet包以使其放入范围,则在安装NuGet包时可以做的事情并不多.

您可以做的唯一其他事情是在您的packages.config文件中添加一个约束,以防止安装较新版本的ServiceStack.

<packages>
    <package id="ServiceStack.Text" version="3.9.71" allowedVersions="[3.9.71,4)" />
</packages>
Run Code Online (Sandbox Code Playgroud)