質問
プリコンパイルせずに Web デプロイメント プロジェクトを使用して Web アプリケーション プロジェクトを公開することはできますか?
ノート
Web コントロールとページを別のアセンブリに分割するために、カスタム VirtualPathProvider を使用してこれらのリソースを読み込みます。これらのプロジェクトを展開するために、コマンド ラインで Web 展開プロジェクトと msbuild を使用しています。
問題の核心は、VirtualPathProviders がプリコンパイル済みアプリケーションに対してサポートされていないことです。ここで、通常のファイルの回避策を見つけました。ascx
ただし、これはやaspx
ページなどのアプリケーション ファイルでは機能しません。「ファイルはプリコンパイルされていないため、要求できません」という行に沿って例外をスローします。
その結果、プリコンパイルを完全に放棄して、サイトのトラフィックが特に高くないため、最初のリクエストのパフォーマンス ヒットを取得することにしました。しかし、ビルド プロセスにすでに組み込まれている Web 配置プロジェクトを使用してこれを行う方法がわかりません。
[アップデート]これを達成するために Microsoft.WebDeployment.targets ファイルをカスタマイズすることを検討していますが、これまでのところうまくいきませんでした。
[アップデート]Microsoft.WebDeployment.targets ファイルを調べてみると、Web 配置プロジェクトを Web アプリケーション プリコンパイルから切り離す簡単な方法がないことがわかりました。実際、必要があるかどうかはわかりません。私が代わりに使用しているのは、次のスニペットに似たものです。デバッグビルド用にデプロイしないという条件 attr を使用してプロジェクトファイルに入れました。
<Target Name="AfterBuild">
<!-- clean output dir -->
<CreateItem Include="$(output)**\*.*">
<Output TaskParameter="Include" ItemName="OldFiles"/>
</CreateItem>
<Delete ContinueOnError="true"
TreatErrorsAsWarnings="true" Files="@(OldFiles)"/>
<!-- copy content -->
<Copy SourceFiles="@(Content)"
DestinationFolder="$(output)%(Content.RelativeDir)" />
<CreateItem Include="$(OutputPath)\*">
<Output TaskParameter="Include" ItemName="Binaries" />
</CreateItem>
<Copy SourceFiles="@(Binaries)" DestinationFolder="$(output)bin" />
<ReplaceConfigSections RootPath="$(output)"
WebConfigReplacementFiles="@(ConfigFiles)"
UseExternalConfigSource="true"
ValidateSectionElements="true"/>
</Target>
プリコンパイルせずにプロジェクトをデプロイするために必要なことはこれだけのようです。より良いものを見つけたら教えてください。