3

ServiceStack を使用するプロジェクトがあります。ServiceStack 4 には商用ライセンスが必要なので、4.x にアップグレードするのではなく、古い 3.9.x コードベースを実行しています。

私自身の 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 4.x のライセンスされていないビットを使用していますか?

4

2 に答える 2

7

ServiceStack.Text 依存関係を .nuspec で明示的に作成し、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>
于 2014-08-02T15:17:31.090 に答える