web-dev-qa-db-ja.com

ASP.NET 5のGlobal.jsonのプロジェクトセクションの説明

新しいASP.NET 5プロジェクトを作成するときに、ソリューションのすべてのコードを常にソースと呼ばれるディレクトリに置いているので、私にとって完全に理にかなっているsrcディレクトリがあることに気付きました。

Global.jsonというファイルがあり、デフォルトで次のコンテンツが含まれていることに気付きました。

{
  "projects": [ "src", "test" ],
  "sdk": {
    "version": "1.0.0-rc1-update1"
  }
}

ASP.NET 5のドキュメントで以下を見つけました: projectsプロパティは、ソリューションのソースコードを含むフォルダーを指定します。デフォルトでは、プロジェクト構造はソースファイルをsrcフォルダーに配置し、ビルドアーティファクトを兄弟フォルダーに配置できるようにして、ソース管理からそのようなものを簡単に除外できるようにします。

ただし、私が念頭に置いているプロジェクト構造は次のとおりです(基本的には、同じソリューションの下で必要な2つの大きなプロジェクトになります)。

MySolution
    MySolutionProject1Src
        client
            p1.WebAPI
        business
            p1.Business
            p1.Model
        data
            p1.Repository
        test
            p1.BusinessTests
            p1.WebAPITests


    MySolutionProject2Src
        client
            p2.Web
        business
            p2.Business
            p2.Model
        data
            p2.Repository
        test
            p2.BusinessTests

Global.jsonを次のように更新しますか? (親ディレクトリごとに1つ):

{
  "projects": [ "MySolutionProject1Src", "MySolutionProject2Src" ],
  "sdk": {
    "version": "1.0.0-rc1-update1"
  }
}

または、もっとこのようなものにする必要があります(各サブディレクトリごとに1つ):

{
  "projects": [ "MySolutionProject1Src/client", "MySolutionProject1Src/business", "MySolutionProject1Src/data" "MySolutionProject1Src/test", "MySolutionProject2Src/client", "MySolutionProject2Src/business", "MySolutionProject2Src/data" "MySolutionProject2Src/test" ],
  "sdk": {
    "version": "1.0.0-rc1-update1"
  }
}

または、単に「src」のままにして、すべてをsrc。の下のサブフォルダとして配置する必要があります。

必要なソリューション構造を作成できると仮定していますが、懸念事項は、global.jsonプロジェクトセクションを更新してそれに一致させるために従うルールです。ドキュメントに基づいて、global.jsonで指定された各パスに対してアーティファクトフォルダーが作成されます。したがって、ソリューション内のすべてのプロジェクトに成果物フォルダーが必要なのか、それとも外側に1つの大きなフォルダーだけが必要なのか疑問に思っています。

19
Blake Rivell

まず、 ドキュメンテーションの一部 に転送します。これは_global.json_について説明しています。

_{
  "projects": [ "src", "test" ],
  "sdk": {
        "version": "1.0.0-beta5",
        "runtime": "clr",
        "architecture": "x86"
  }
}
_

コンピューターには_dnx.exe_の複数のバージョンがあるため、version(およびオプションでruntimeおよびarchitecture)は重要です。 _%USERPROFILE%\.dnx\runtimes_ディレクトリを調べて、インストールされているすべてのランタイムを確認できます。 _"sdk"_の_global.json_部分は、インストールしたランタイムの1つからの_dnx.exe_のバージョンを定義します。

_"projects"_の_global.json_部分について、ディレクトリからあらゆるレベルのすべてのレベルでスキャンされるall兄弟フォルダーについて理解することが重要です。検出されるすべての_project.json_は、ソリューションのプロジェクトとして解釈されます。

たとえば、ASP.NETの一部をダウンロードして、ソリューション階層の新しいサブフォルダーに配置できます。たとえば、 RC1 Entity Framework 7のソース( ファイル )をダウンロードして、プロジェクトのefフォルダー内の新しいsrcフォルダーにZipファイルを抽出できます。ソリューションを再度開いた後すぐに、プロジェクトのリストがますます長くなり、すべてのEntity Framework 7コンポーネントがソリューションに含まれることがわかります。同じ方法で、ダウンロードしたソースを別のディレクトリ_C:\aspnet\EF7_に抽出して使用できます

_{
  "projects": [ "src", "c:/aspnet/EF7" ],
  "sdk": {
    "version": "1.0.0-rc1-update1"
  }
}
_

同じ効果があります。後でEntity Framework 7のソースのデバッグを削除することにした場合は、_"c:/aspnet/EF7"_を_global.json_から除外し、ソリューションビューで選択して以前に追加したプロジェクトをVisual Studioで削除してクリックするだけです Del キー。

フォルダー構造にある可能性をクリアする必要があると思います。

ソリューション階層に存在する可能性があるもう1つの非常に重要なオプションファイルは、_NuGet.config_ファイルです。パッケージがロードされるNuGetフィードを定義します。問題は、manyNuGetリポジトリ( 回答 を参照)があり、ASP.NET 5コンポーネントの異なる予備バージョンがあることです。exactのような依存関係を使用する場合

_"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"
_

次に、NuGetリポジトリに明示的なバージョンが必要です。問題は、時々、次のような依存関係を使用することです

_"EntityFramework.MicrosoftSqlServer": "7.0.0-*"
_

パッケージの最新ビルドをロードします。間違ったNuGetフィードを使用する場合は、他のRC1パッケージと互換性のない初期のRC2ビルドを取得できます(少なくともベータバージョン間で多くのコンポーネントの名前が変更されているため)。ソリューション(すべてのプロジェクト)がRC1を使用していることを確認するには、次の_NuGet.config_をソリューションフォルダー(すべてのプロジェクトの上)に配置します。たとえば、次のコンテンツ

_<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageRestore>
    <clear /> <!-- ensure only the sources defined below are used -->
    <add key="automatic" value="False" />
  </packageRestore>
  <packageSources>
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetmaster/api/v3/index.json" />
    <add key="NuGet" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
  <activePackageSource>
    <add key="AspNetVNext" value="true"  />
    <add key="NuGet" value="true"  />
  </activePackageSource>
</configuration>
_

ドキュメントを参照してください 。いくつかのプロジェクトフォルダーでコマンドラインを開いて実行することをお勧めします

_dnu feeds list
_

コマンド。現在のフォルダーおよび親フォルダーからのすべての_NuGet.config_およびグローバルファイル_%appdata%\NuGet\NuGet.Config_がcombinedになることを示します。 NuGetは、すべてのアクティブなリポジトリでパッケージを検索します。 https://api.nuget.org/v3/index.json および https://www.myget.org/F/aspnetmaster/api/v3/index.json 上記の場合。

複数の_NuGet.config_が存在し、異なるNuGetフィードを指しているか、一部のフィードを有効/無効にしている場合、競合が発生する可能性があります。コマンド_dnu feeds list_はここで役立ちます。競合を防ぐ/解決するには、プロジェクト階層内のすべての_NuGet.config_ファイルを常にスキャンする必要があります。多くの競合の解決は、主に正しいフィードの使用、またはパッケージの解決のための明示的なバージョンの使用にあります。

NuGet Configuration Inheritanceについて説明する の記事 を読むことをお勧めします。

既存の環境に適した構造を決定できることを願っています。standard structureを保持することをお勧めします

_solution
    src
        project
        folderWithProjects
_

ソリューションディレクトリに_global.json_および_NuGet.config_を配置します。テストプロジェクトのデフォルトの場所:メインプロジェクトとは別:

_solution
    src
        project
        folderWithProjects
    test
        testproject1
        testproject2
_

GitHub またはMVC6 ここでEntity Framework 7の構造を調べることができます )。構造に従うか、別の場所を選択して、_"projects"_の_global.json_部分を変更できます。

UPDATED:マイクロソフトはRC1とRC2の間に多くの変更を加えました。 _Dnx.exe_は、ASP.NET Coreでは使用されなくなります。代わりに_dotnet.exe_を使用する必要があります。新規/変更された_global.json_および_project.json_の説明はまだ完全には文書化されていません。ドキュメントの暫定版を見ることができます こちら 。古いドキュメント(_https://docs.asp.net/en/latest/dnx_の下)のリンクが壊れています。

22
Oleg