2016-04-24 18 views
5

大規模なソリューションを破るのは、コードベースの構成に関する問題の複数のプロジェクトですが、これはVisual Studio内の以前のバージョンの.NET Frameworkで簡単に実行できました。.NET CLIを使用して他のプロジェクトへの依存関係を指定する方法は?

.NET CLIではどのように同じことができますか?私たちは、例えば、以下の簡略化のシナリオがあるとします。

- Solution Folder 
    - global.json 
    - src 
     - LibProject 
     - ConsoleProject 

ConsoleProjectLibProjectに依存することになりましたと。我々はこれを行う場合、我々はConsoleProjectまたは我々がしようとの依存関係を復元しようとすると、

"dependencies": { 
    "Microsoft.NETCore.App": { 
     "type": "platform", 
     "version": "1.0.0-*" 
    }, 
    "LibProject": "1.0.0-*" 
} 

しかし:直感的に、私は、これはConsoleProjectproject.jsonはこのようなdependenciesセクションが含まれているしなければならないことを意味することを信じて我々はそれを行うことはできませんそれを構築します。復元しようとすると、メッセージが表示されます。

'.NETCoreApp、Version = v1.0'で 'LibProject(> = 1.0.0)'を解決できません。

私はその理由を理解しています。復元するとき、NuGetはこれを特定のフィードのパッケージとしてNuGet.configに登録しようとしています。しかし、これを行うべきではありません、それは兄弟フォルダのものを使用する必要があります。

.NETコアの以前のバージョンでは、VSで参照を追加してから、ConsoleProjectをビルドしようとすると、VSは最初にLibProjectをビルドし、対応するDLLを使用します。

ここでは同じことがどのように行われますか?どのように同じソリューションで別のプロジェクトを参照するのですか。このような依存関係を考慮して.NET CLIを使用して復元/ビルド/実行するにはどうすればよいですか?

+1

どれでも幸運をあなたは ' "LibProject" を行う場合:{ "ターゲット" を: "project"} '? – khellang

+0

'csproj'形式を使用する新しいバージョンのdotnet cliでは、' dotnet add reference ../ MyProject/MyProject.csproj'を実行することができます https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-add-reference – dbattaglia

答えて

4

解決策がglobal.jsonファイル上にあるプロジェクトを定義したら、特定のバージョンを使わずにproject.json上で名前を指定するだけで解決できます。

例:あなたがここでより良い例を見つけることができます

global.json

{ 
    "projects":[ 
     "ConsoleProject", 
     "LibProject" 
    ] 
} 

ConsoleProject/project.json

{ 
    "dependencies":{ 
     "LibProject":"", 
    } 
} 

http://forums.dotnetfoundation.org/t/referencing-another-project-in-net-core/1298/2

またはこのリポジトリに:https://github.com/cartermp/dnx-apps/tree/master/multiple-projects

+0

回答ありがとうございますが、これはうまくいきませんでした。おそらく以前はDNXで動作していましたが、.NET CLIではうまく動作しませんでした。実際には、 'src/ConsoleProject'フォルダの中から' dotnet restore'を実行しているので、 'global.json'が' src'フォルダの側に座っているので、 'dotnet'ツールチェーンは見えませんそれ。とにかく、私が直面している問題は実際にはバージョンを指定することではなく、NuGetフィードを見るのではなく、 'dotnet restore'を' LibProject'を兄弟フォルダから選択することです。 – user1620696

+0

これは、global.jsonファイルがもう必要ないと考えています。どのバージョンのドットネットCLIを使用していますか?ここにあなたと似た問題があり、うまくいくようです。 https://github.com/dotnet/cli/issues/966#issuecomment-174206475 –

+1

バージョン1.0.0-rc2-002476です。とにかく、私は今すぐ動作させました、それは問題を引き起こしていた依存関係のタイプミスです。とにかく:私が見つけたいくつかの詳細があります - 'dotnet'ツールチェーンを使うために、' global.json'ファイルは本当に必要ではありませんが、OmnisharpのVSコードでの作業のために必要です。また、 '' LibProject ":" 1.0.0 - * "'のようにプロジェクトのバージョンを参照することもできます。助けてくれてありがとう。 – user1620696

2

the documentation on writing librariesによると、溶液中で別のプロジェクトの依存関係を指定する新しい正しい方法は次のとおりです。

{ 
    "dependencies":{ 
     "AwesomeLibrary.Core": { 
      "version": "1.0.0", 
      "target": "project" 
     } 
    } 
} 

target: projectビットは、それがパッケージソースで見てはいけないというNuGetを伝えます。

これは、あなたのソリューションのための次のディレクトリ構造を持っている前提としています

AwesomeLibrary 
|__global.json 
|__/src 
    |__/AwesomeLibrary.Core 
     |__Source Files 
     |__project.json 
    |__/AwesomeLibrary.Other 
     |__Source Files 
     |__project.json 
/test 
    (... etc) 

global.jsonファイルと同じように:

{ 
    "projects":["src", "test"] 
} 
+1

ドキュメントリンクが壊れています。私はこの仕事をすることができませんでした。私は、ヘルプ文書がなくなったので、再びツールを変更したと推測しています。 – trevorc

+1

更新されたリンク:https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/libraries#how-to-use-multiple-projects –

+0

更新されました。ありがとう@tanguy_k! –

関連する問題