2016-08-22 12 views
3

packages.configファイルを使用してNuGetの依存関係を指定するときは、SemVerという文字列を指定して、更新可能にしたい文字列を指定することができます。 []を使用することによって、私は現在、私のパッケージを単一のバージョンに効果的にピン留めすることができます。例:今、我々は(ただし、短い、それはかもしれ住んでいた)NuGetの依存関係を指定するproject.jsonを持っている.NETコアプロジェクトでproject.json NuGetの依存関係の正確なバージョンを指定する

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Common.Logging" version="3.3.0" allowedVersions="[3.3.0, 3.3.0]" />  
</packages> 

、どのように私は、このようなことdotnet restoreが更新されないバージョンのNuGetの依存関係を固定することができ、私の新しいバージョンへのアプリケーションは、私のパッケージソースから入手できますか?このnuget documentation

{ 
    "version": "1.0.0-*", 
    "dependencies": { 
    "NETStandard.Library": "1.6.0", 
    "Newtonsoft.Json": "9.0.1" //how can i pin to 9.0.1 ?? 
    }, 
} 

図#2はstronlyこれが可能である意味、それを行うための構文を提供していません。

- UPDATE -

私はパッケージリポジトリとして2つの.NETコアクラスライブラリと私のローカルファイルシステムでこれをテストしました。私はUpdateMeDependencyLibと呼ばれるクラスライブラリを作成し、それをv1.0.0としてパッケージ化し、それをnuget経由で2番目のプロジェクトから使いました。以下は、私は、バージョン1.1.0へのUpdateMeDependencyLibを更新し、再パッケージ化UpdateMeDependencyLib

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
    "NETStandard.Library": "1.6.0", 
    "UpdateMeDependencyLib": "1.0.0" 
    }, 

    "frameworks": { 
    "netstandard1.6": { 
     "imports": "dnxcore50" 
    } 
    } 
} 

を消費する第二クラスライブラリからproject.jsonがあるので、v1.0.0デベロッパーと私の地元のnugetパッケージV1.1.0は、今そこにありますシステム。 UpdateMeDependencyLibのV1.1.0を作成した後、私は今

    そのbinディレクトリに UpdateMeDependencyLib出力v1.1.0デベロッパーを消費(消費者project.jsonを変更することなく)Visual Studioでプロジェクトをコンパイルし、次の経験

    • を取得します
    • 私はパッケージが消費者のライブラリを復元強制した場合、私は今Nuget警告「NU1007依存関係は、指定がUpdateMeDependencyLib> = 1.0.0だったが、UpdateMeDependencyLib 1.1.0になってしまった」
ます

NU1007 warning

だから、それをピンしないと、新しいバージョンが私のNuGetソースに表示されたとき、それは自動的に更新されます私の消費ライブラリーに「1.0.0」を使用して、単純に見えます。

+0

「9.0.1」は、あなたが望むものとまったく同じです。 –

+0

こんにちは@DannyChen私は私の質問にいくつかの詳細を追加しました。 「9.0.1」を使用しても私にとってはうまくいかないようです。 –

答えて

1

次の2つのプロジェクトが同じソリューションにあるように、システムは依存関係を解決するために、ローカルのパッケージレポを使用していない

"UpdateMeDependencyLib": { 
    "version": "1.0.0", 
    "target": "package" 
} 

ご参照のために以下の表記を使用する必要があります。プロジェクトを参照として直接使用します。参照1.0.0はソリューションに存在しないため( "UpdateMeDeepencyLib": "1.0.0"は> = 1.0.0を意味するため)、Nugetルール "適用可能な最下位バージョン"を使用して、1.1.0プロジェクトを参照して依存関係を解決します。依存ツリーのUpdateMeDependencyLibのアイコンは、ナゲットツリーではないことに注意してください。

わからないことは、依存関係を厳密に1.0.0に設定する方法です。この場合、ビルドを中断します。

+0

私はまだ混乱しています。彼のプロジェクトでは、 "UpdateMeDependencyLib": "1.0.0" 'を参照しています - 1.0.0がローカルパッケージに存在していますリポジトリ(1.0.0と1.1.0の両方)...それはなぜそれを使用しないのですか? – jbyrd

+0

@jbyrdなぜなら、あなたがターゲットを強制しなければならない理由であるパッケージではなく、プロジェクトをシステムが検索するからです。 "package" –

1

特定のバージョンをロックするには、バージョン番号を角かっこで囲みます。

"UpdateMeDependencyLib": { 
    "version": "[1.0.0]", 
    "target": "package" 
} 

更新後に復元パッケージを実行する必要があります。

関連する問題