私は電子商取引サイトで、Asp.Net 5とMVC6のオニオンアーキテクチャ(OA)に準拠しているため、レイヤ間の結合が緩やかです。私はまた、MVCプロジェクトではなく、独自のアセンブリでスタートアップコードをデカップリングしたいと思っています。Asp.Net 5 MVC 6 Startup.cs Beta8でのデカップリング
ベータ7 hereのように、Startup.csをクラスライブラリ(ブートストラップ)に移動するのは非常に簡単でした。上記のアプローチを使用した1つの興味深い事実は、MVCプロジェクトからBootstrapperアセンブリを参照する必要がなかったことです。実行時にIISExpressでホストされ、アセンブリスキャンにより、Microsoft.AspNet.Hosting.iniファイルに記載されているBootstrapperアセンブリが見つかりました。これは、依存性注入をフックアップするためにはインフラ、サービスなどのような他のすべてのプロジェクトへの参照を持っていますglobal.json
{
"projects": [ "Source/Projects","Source/Bootstrapper" ],
"sdk": {
"architecture": "x64",
"runtime": "clr",
"version": "1.0.0-beta7"
}
}
ブートストラッププロジェクトの場所を指定することで可能でした。
MVCプロジェクトでBootstrapperプロジェクトを参照しない理由は、MVCプロジェクトから直接インフラストラクチャコードにアクセスすることを避けるためです。今朝ベータ8にアップグレードするまで、これはうまくいきました。
ホスティングモデルは、私が
global.json
{
"projects": [ "Source/Projects","Source/Bootstrapper" ],
"sdk": {
"architecture": "x64",
"runtime": "clr",
"version": "1.0.0-beta8"
}
}
project.json以下のようにglobal.jsonとproject.jsonファイルをリファクタリングしなければならなかった、ケストレルにIISから変更されたよう
{
"dependencies": {
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-beta8",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-beta8",
"....",
"....",
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
}
}
上記の変更を行った後、私は次のエラーを取得開始かかわらず、私はそれがStartupDevelopment 'または「スタートアップ」という名前
内部サーバーエラーのSystem.InvalidOperationException A タイプが アセンブリ「EcommerceMvcApp」で見つけることができなかったのVisual Studioから直接DNXコマンドまたはを使用して実行するかどうか。 Microsoft.AspNet.Hosting.Startup.StartupLoader.FindStartupType Microsoft.AspNet.Hosting.Internal.HostingEngine.EnsureStartup(AT(文字列 startupAssemblyName、IListのdiagnosticMessages))で Microsoft.AspNet.Hosting.Internal.HostingEngine.EnsureApplicationServices(AT Microsoft.AspNet.Hosting.Internal.HostingEngine.BuildApplicationで) ()hereを説明したように、私はウェブコマンドにconfigファイルまたはインライン引数を指定する必要があることが判明
。提案に従った後、私は、アプリケーションと、私は、ファイルまたはアセンブリ 「ブートストラップ」またはその依存関係の1つをロードできませんでした
System.IO.FileNotFoundException下のエラーを取得し始めたこの時間を実行してみました。指定した ファイルが見つかりません。 System.Reflection.RuntimeAssembly。 System.Reflection.RuntimeAssembly.nLoad(のAssemblyNameファイル名、文字列 コードベースで_nLoad(のAssemblyNameファイル名、文字列 コードベース、証拠assemblySecurity、RuntimeAssembly locationHint、 StackCrawlMark & stackMark、のIntPtr pPrivHostBinder、ブール throwOnFileNotFound、ブールforIntrospection、ブール suppressSecurityChecks) System.Reflection.RuntimeAssembly.InternalLoadAssemblyNameで、証拠assemblySecurity、RuntimeAssembly locationHint、 StackCrawlMark & stackMark、のIntPtr pPrivHostBinder、ブール throwOnFileNotFound、ブールforIntrospection、ブール suppressSecurityChecks)(のAssemblyName Microsoft.AspNet.Hosting.StartupでSystem.Reflection.Assembly.Load(のAssemblyName assemblyRef)でassemblyRef、証拠assemblySecurity、RuntimeAssembly reqAssembly、 StackCrawlMark & stackMark、のIntPtr pPrivHostBinder、ブール throwOnFileNotFound、ブールforIntrospection、ブール suppressSecurityChecks) Microsoft.AspNet.Hosting.Internal.HostingEngine.EnsureApplicationServicesでMicrosoft.AspNet.Hosting.Internal.HostingEngine.EnsureStartup()()Microsoft.AspNet.Hostingで で.StartupLoader.FindStartupType(文字列 startupAssemblyName、IListのdiagnosticMessages)。 Internal.HostingEngine.BuildApplication()
solutionでは、MVCプロジェクトのBootstrapperプロジェクトへの参照を追加する必要があります。しかし、それは最初の場所で別々のブートストラップアセンブリを持つという目的を破っています。
なぜ、Beta7でやったように、global.jsonの "projects"で指定されたソースを使ってBootstrapperアセンブリを見つけることができないのですか?またはglobal.jsonを無視した新しいホスティングモデルですか?スタートアップアセンブリの場所を指定する方法はありますか?
アップデート1
ちょうどベータ7で、それはまたMicrosoft.AspNet.Server.WebListenerとMicrosoft.AspNet.Server.Kestrelの両方のための「DNXコマンド」を使用して動作することを強調するためにしたいです。
"commands": {
"kestrel": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:5004 --config wwwroot/Microsoft.AspNet.Hosting.ini",
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5004 --config wwwroot/Microsoft.AspNet.Hosting.ini"
}
ただし、Beta8の両方のサーバーでdnxコマンド(Microsoft.AspNet.Hosting.jsonファイルを使用)が失敗します。誰かがベータ版のIIS Heliosコンポーネントと関係があると思っている人は、そうではありません。アセンブリ参照がベータ8
アップデート2
ここで私はIISExpressを使用してベータ8で実行しようとすると、私が取得スタックトレースがある中で働いて停止した理由を私は次のように困惑しています。 dnx binフォルダにアセンブリがあるかのように見えます。
System.IO.FileNotFoundException:ファイルまたはアセンブリを読み込めませんでした。 'Bootstrapper'またはその依存関係の1つ。指定した ファイルが見つかりません。ファイル名: 'Bootstrapper' at System.Reflection.RuntimeAssembly。 System.Reflection.RuntimeAssembly.nLoad(のAssemblyNameファイル名、文字列 コードベースで_nLoad(のAssemblyNameファイル名、文字列 コードベース、証拠assemblySecurity、RuntimeAssembly locationHint、 StackCrawlMark & stackMark、のIntPtr pPrivHostBinder、ブール throwOnFileNotFound、ブールforIntrospection、ブール suppressSecurityChecks) System.Reflection.RuntimeAssembly.InternalLoadAssemblyNameで、証拠assemblySecurity、RuntimeAssembly locationHint、 StackCrawlMark & stackMark、のIntPtr pPrivHostBinder、ブール throwOnFileNotFound、ブールforIntrospection、ブール suppressSecurityChecks)(のAssemblyName Microsoft.AspNet.Hosting.StartupでSystem.Reflection.Assembly.Load(のAssemblyName assemblyRef)でassemblyRef、証拠assemblySecurity、RuntimeAssembly reqAssembly、 StackCrawlMark & stackMark、のIntPtr pPrivHostBinder、ブール throwOnFileNotFound、ブールforIntrospection、ブール suppressSecurityChecks) Microsoft.AspNet.Hosting.Internal.HostingEngine.EnsureApplicationServicesでMicrosoft.AspNet.Hosting.Internal.HostingEngine.EnsureStartup()()Microsoft.AspNetで で.StartupLoader.FindStartupType(文字列 startupAssemblyName、IList`1 diagnosticMessages)。 Hosting.Internal.HostingEngine.BuildApplication()
===バインド前の状態情報=== LOG:DisplayName =ブートストラップ(部分)WRN: アセンブリの部分バインディング情報が提供されました:WRN:アセンブリ名:ブートストラップ|ドメインID:1 WRN: 部分バインドは、アセンブリ表示名の一部のみが である場合に発生します。 WRN:バインダーが不正確な アセンブリをロードすることがあります。 WRN:アセンブリの完全指定テキスト を提供することが推奨されます。この名前は、単純名、 バージョン、カルチャ、および公開鍵トークンで構成されています。 WRN:詳細については http://go.microsoft.com/fwlink/?LinkId=109270のホワイトペーパーを参照し、この問題の一般的な解決方法については を参照してください。ログ:Appbase = ファイル:/// C:/Users/sshassan/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta8/bin/ ログ:初期PrivatePath = NULL呼び出しアセンブリ:(不明)。 === LOG:このバインドは、デフォルトのロードコンテキストで開始します。 LOG:アプリケーション構成ファイルが見つかりません。 LOG:ホスト構成ファイルを使用する:LOG: C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.configのマシン構成ファイルを使用する。 LOG:現時点でポリシーが参照に適用されていません(プライベート、 カスタム、部分、または場所ベースのアセンブリバインド)。ログ:新しいURL をダウンロードしようとしています ファイル:/// C:/Users/sshassan/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta8/bin/Bootstrapper.DLL。 ログ:新しいURLのダウンロードを試みています ファイル:/// C:/Users/sshassan/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta8/bin/Bootstrapper/Bootstrapper.DLL。 ログ:新しいURLのダウンロードを試みています ファイル:/// C:/Users/sshassan/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta8/bin/Bootstrapper.EXE。 ログ:新しいURLのダウンロードを試みています ファイル:/// C:/Users/sshassan/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta8/bin/Bootstrapper/Bootstrapper.EXE。
おそらく、私がDNU実行する場合、公開し、それが動作するIISの下でそれをホストするが、それは私がそれを
本当にこれを[aspnet/Homeリポジトリ](https://github.com/aspnet/Home/)に持って行き、そこに助けを求めるべきです。 – poke
あなたはそれを達成できますか? RC1がリリースされたので、もっと簡単かもしれません。 – Franco
まだ試したことがありません。私はスタートアップファイルの新しいエントリーポイント、すなわちMainメソッドで可能かもしれないと思います。私はそれを行くだろう –