新しい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つの大きなフォルダーだけが必要なのか疑問に思っています。
まず、 ドキュメンテーションの一部 に転送します。これは_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
_の下)のリンクが壊れています。