24

したがって、私の Web サイトの 1 つに、アプリケーションの開始前に実行する必要がある PreApplicationStartMethod があります。

[assembly: PreApplicationStartMethod(typeof(ServiceStackAppHost), "Start")]

このメソッドは、いくつかのブートストラップを行い、設定されている構成に依存します。

ここで、自動化されたビルド プロセスの一部として Web サイトをコンパイルしたいので、aspnet_compiler.exe を呼び出しますが、PreApplicationStartMethod を実行するために失敗します。

AfterBuild:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_compiler.exe -v temp -p C:\Projects\ エラー ASPRUNTIME : アプリケーション前の開始初期化メソッド Start on type RedactedNameSpace.ServiceStackAppHost で例外がスローされました次のエラー メッセージ: 依存関係の解決に失敗しました。タイプ = "..."

Web サイトのコンパイル時に aspnet_compiler.exe が PreApplicationStartMethod を呼び出さないようにするにはどうすればよいですか?

4

2 に答える 2

32

短い答えは、実行を防ぐことはできず、これは仕様によるものです、問題を回避できるということです。

aspnet_compiler.exe 中に PreApplicationStart メソッドが実行される理由

その理由は、PreApplicationStartMethod(またはその上に構築されるWebActivator ) を実際にコンパイルに影響を与えるものに使用できるためです。省略した場合、サイトはコンパイルされない可能性があります。

たとえば、メソッドのコンパイルに名前空間を追加するPreAppStartと、Razor ページのコンパイルに影響します。

明らかに、aspnet_precompiler を使用するときにすべてのPreAppStartメソッドを実行する必要はありませんが、必要な場合に備えてすべてのメソッドを実行します。

aspnet_compiler.exe で実行しているかどうかの検出

そこにあるコードが aspnet_compiler で壊れる場合は、メソッドに条件付きロジックを追加しPreAppStartて状況を検出し、コードの実行を省略する必要がある場合があります。

メソッドが aspnet_compiler.exe のコンテキストで実行されているか (どこにあるのか)、または実行時に (どこにあるのか)System.Web.Hosting.HostingEnvironment.InClientBuildManagerを判断するために、property を確認できます。基本的に aspnet_compiler.exe と同じコード パスを使用する VS 内の Web サイトの構築にも適用されます。PreAppStarttruefalseInClientBuildManager

代わりに PostStart メソッドを使用してみてください

WebActivator も をサポートしておりPostApplicationStartMethod、これらは aspnet_compiler では実行されないことに注意してください。そのコードはの Application_Startに実行されるため、シナリオに適している場合とそうでない場合があります。しかし、それはあなたにとって解決策になるかもしれません。

aspnet_compiler.exe デバッグのヒント

直接関係はありませんが、デバッグに役立ちます。-errorstack を aspnet_compiler.exe に渡して、エラーが発生した場合により完全なスタックを取得できます。

于 2012-12-03T18:41:19.717 に答える
0

PreApplicationStartMethod は、ビルド プロセスの非常に早い段階でコードを読み込むためのアセンブリ属性です。コンパイラは、コンパイル プロセスを開始するために、このコードを読み込んで実行する必要があります。PreApplicationStartMethod は、初期化プロセスではなくビルド プロセスに似ています。したがって、コードをglobal.asaxのApplication_Startメソッドに入れてみることができます!!

于 2012-12-03T13:40:23.620 に答える