2

起動時に自分のWebサイトの構成を検証するプラグインdllをいくつか作成しています。これらのdllを/binフォルダーのサブディレクトリに配置したいと思います。そこで、これをweb.configファイルに追加しました。

<runtime>
   <assemblyBinding appliesTo="v2.0.50727" xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="bin;bin/plugins" />
      ...
</runtime>

そして、いくつかのdllをビルドして/ bin/pluginsディレクトリにデプロイするプロジェクトがあります。

ビルド手順が正しいことを確認し、サブフォルダーを作成してdllをそこに配置します。

次に、application_startで、アセンブリをロードしようとします。現在実行中のアセンブリパスは次のようになります。

    Dim assembly As Assembly = System.Reflection.Assembly.GetExecutingAssembly()
    Dim asmDirectory As String = Path.GetDirectoryName(assembly.Location)
    Dim pluginDirectory As String = Path.Combine(asmDirectory, "plugins")

pluginDirectoryは通常、次のように設定されます。

"C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\91be3168\7a998462\assembly\dl3\33ada1a0\6561a9fc_a4dacd01"

しかし、そのディレクトリには、プラグインディレクトリはありません。

IIS(私の場合はIIS 6.0)にサブフォルダーとコンテンツをコードディレクトリから実行場所にコピーさせるにはどうすればよいですか?

VB.NETが読みにくい場合は、C#に変換できます。

4

1 に答える 1

4

そこでアセンブリをコピーする動作は、シャドウコピーと呼ばれます。これを有効にするために、ASP.NETはAppDomain.SetShadowCopyPathを呼び出し(これは廃止されたAPIですが、それでも呼び出されます)、パスをbinフォルダーにのみ渡します。

そのため、サブフォルダー内のアセンブリがシャドウコピーされていないのがわかります。その動作は構成できません。その上、たとえそうであったとしても、それはあなたがビンに持っているのと同じ構造を再現しないので、あなたが望むようには機能しません。

実行中のアセンブリパスに依存する代わりに、HttpRuntime.BinDirectoryを呼び出すだけで、プラグインフォルダーを追加できるbinへのパスが提供されます。

于 2012-12-19T19:02:24.747 に答える