Не уверен, что то, что я здесь сделаю, даже доступно с помощью инструмента aspnet_compiler.exe, но здесь идет:
У нас есть сайт, на котором мы разрешаем пользователям обходить скины, позволяя им изменять мастер-страницы, или, вернее, мы не позволяем им напрямую их изменять, мы даем им урезанный "стиль разметки", который они могут использовать для изменения html этих страниц, поэтому они могут по существу "скрыть" сайт, чтобы они выглядели как их собственный интерфейс.
Я стараюсь оптимизировать сайт, предварительно скомпилировав представления и страницы aspx. Но я хочу, чтобы макет и мастер-страницы отображали эти представления и страницы, чтобы они оставались обновляемыми. Однако я не могу заставить это работать...
Скажем, у нас есть следующая страница aspx:
<%@ Page Title="Hello World" MasterPageFile="~/Skinable/Skin.Master" Language="C#" AutoEventWireup="true" CodeBehind="HelloWorld.aspx.cs" Inherits="Project.HelloWorld" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Content" Runat="server">
Hello World!
</asp:Content>
Какая ссылка на файл главной страницы Skin.Master
в папке Skinable
. Skin.Master
должен быть обновляемым. Вот что я пробовал:
-
Если я просто скомпилирую сайт с помощью этой команды aspnet_compiler.exe, главная страница тоже будет скомпилирована и не обновляется:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_compiler.exe -v / -p d:\SourceFolder d:\CompiledSite
-
Если я исключаю скин-папку (добавив
-x Skinable
к команде) в файле aspnet_compiler.exe, папка не будет скопирована в выходную папку, но главная страница все еще будет скомпилирована в папку bin (то есть,skin.master.compiled
файлskin.master.compiled
генерируется в папку сборки). И когда мы копируем главную страницу в папку развертывания, изменения в этом файле игнорируются (она просто использовала главную страницу, как это было во время компиляции). -
Если я скрою папку Skinable перед запуском aspnet_compiler (присваиваю
attrib +h d:\SourceFolder\Skinable
), то я получаю тот же результат, что и выше (т.е. При исключении через флаг -x), -
Если я укажу флаг -u (Updatable) при запуске aspnet_compiler.exe, ну, я не уверен, что преимущество этого в том, чтобы быть честным, поскольку в этом случае ничего не получается скомпилировано, поэтому компиляция происходит на летать, когда вы запрашиваете страницу, так что в чем смысл...
-
Наконец, если я разрешаю компиляцию всего, а затем заходим в папку bin и DELETE skin.master.compiled, тогда, когда вы запрашиваете страницу, использующую эту главную страницу, вы получаете ошибку "Файл" Skin.master "не имеет были предварительно скомпилированы и не могут быть запрошены "
Я подозреваю, что ссылка на главную страницу является проблемой здесь - то есть, если страница ссылается на главную страницу, тогда эта главная страница ДОЛЖНА также быть скомпилирована, если вы хотите скомпилировать страницу, но я не уверен. Неужели я здесь ничего не скрываю?