Вопрос
Можно ли опубликовать проект веб-приложения, используя проект веб-развертывания без предварительной компиляции?
Примечания
Чтобы разделить веб-элементы управления и страницы на отдельную сборку, я использую пользовательский VirtualPathProvider для загрузки этих ресурсов. Я использую проекты веб-развертывания и msbuild в строке cmd для развертывания этих проектов.
Суть в том, что VirtualPathProviders не поддерживаются для скомпилированных приложений. Я нашел обходной путь для обычных файлов здесь . Однако это не работает для файлов приложений, таких как ascx
и aspx
страниц. Он выдает исключение в духе «файл не был предварительно скомпилирован и не может быть запрошен».
В результате я решил попытаться вообще отказаться от прекомпиляции и принять начальный удар по производительности запросов, поскольку трафик нашего сайта не особенно высок. Однако я не могу понять, как это сделать с помощью проектов веб-развертывания, которые уже очень встроены в наш процесс сборки.
[Обновить]
Я пытаюсь настроить файл Microsoft.WebDeployment.targets для достижения этой цели, но мне пока не повезло.
[Обновить]
Изучая файл Microsoft.WebDeployment.targets, я обнаружил, что не существует простого способа отделения проектов веб-развертывания от предварительной компиляции веб-приложения. На самом деле, я не уверен, что в этом есть необходимость. Вместо этого я использую что-то вроде следующего фрагмента. Я просто поместил его в файл проекта с условием 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>
Кажется, что это все, что нужно для развертывания проекта без предварительной компиляции. Дайте мне знать, если найдете что-нибудь получше.