我有一个使用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>
问题是 - ServiceStack 包取决于ServiceStack框架的其他各个位,安装ServiceStack 3.9.71正在将 ServiceStack.Text v4.0.24安装到我的项目中。它 会弹出需要许可证接受的对话框,这就是提醒我发生了一些奇怪的事情 - 但是如果没有为其他所需的ServiceStack组件手动定义我自己的依赖项,我怎样才能确保我和#39;我不会在我的项目中以未经许可的ServiceStack 4.x结束吗?
答案 0 :(得分:6)
在.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>
这将强制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>
答案 1 :(得分:0)
我为此创建了自己的“包装器”包,其中不包含额外文件,只包含依赖项 - 如下所示:
<dependencies>
<dependency id="ServiceStack.Text" version="[3.9.71]" />
<dependency id="ServiceStack.Common" version="[3.9.71]" />
<dependency id="ServiceStack.Redis" version="[3.9.71]" />
<dependency id="ServiceStack.OrmLite.SqlServer" version="[3.9.71]" />
<dependency id="ServiceStack" version="[3.9.71]" />
</dependencies>