Web部署项目:不预编译发布

bra*_*rad 6 asp.net virtualpathprovider web-deployment-project precompiled

问题

是否可以使用Web部署项目发布Web应用程序项目而无需预编译?

笔记

为了将Web控件和页面拆分为单独的程序集,我使用自定义VirtualPathProvider来加载这些资源.我在cmd行使用Web部署项目和msbuild来部署这些项目.

问题的关键在于预编译应用程序不支持VirtualPathProviders.我在这里找到了常规文件的解决方法.但是,这不适用于诸如ascxaspx页面之类的应用程序文件.它引发了一个例外,即"文件尚未预编译,无法请求".

因此,我决定尝试完全放弃预编译,并且由于我们的网站流量不是特别高,因此初始请求性能受到影响.但是,我无法弄清楚如何使用Web部署项目来实现这一点,这些项目已经非常适合我们的构建过程.

[更新]

我正在研究自定义Microsoft.WebDeployment.targets文件以实现此目的,但到目前为止我还没有运气.

[更新]

在Microsoft.WebDeployment.targets文件中进行挖掘时,我发现没有直接的方法将Web部署项目与Web应用程序预编译分离.事实上,我不确定是否有任何需要.我现在使用的是类似于以下代码段的内容.我只是将它放入项目文件中,条件为attr,不为Debug版本部署.

<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>
Run Code Online (Sandbox Code Playgroud)

似乎这就是在没有预编译的情况下部署项目所需的全部内容.如果你发现更好的东西,请告诉我.

Alc*_*nja 1

也许我遗漏了一些东西(我对 VirtualPathProviders 没有任何经验),但如果您只想不预编译您的 aspx 和 ascx 文件,请在编译部分中勾选“允许此预编译站点可更新”框部署项目的属性页(无论您使用哪种配置)。

来自MSDN

允许该预编译站点可更新

指定 .aspx 页面的内容不编译成程序集;相反,标记保持原样,允许您在预编译网站后更改 HTML 和客户端功能。选中此复选框相当于将 -u 选项添加到 aspnet_compiler.exe 命令中。