소스 - asp.net mvc 구조



aspx 및 cshtml 페이지의 사전 컴파일은 수행하지만 마스터 또는 레이아웃 페이지는 업데이트 가능 상태로 유지 (1)

당신이 다른 방향으로 갔다면? html 및 css 변경 사항을 캡처 한 다음 해당 회사의 새 css 폴더 또는 파일을 만든 경우 어떻게됩니까? (파일은 원본과 그 변경 내용입니다.) 그런 다음 마스터 페이지가로드되면 회사에서 사용하는 파일이나 폴더를 데이터베이스에서 가져 와서 마스터 페이지의 C #에서이 파일을 css에 씁니다.

프로세스는 다음과 같습니다.

  • 변경 사항 캡처
  • 원본과 같은 CSS 폴더와 파일을 만들지 만 변경 내용은 원본과 같습니다.
  • 데이터베이스 테이블에서 사용할 css 파일을 가져옵니다 (클라이언트 -> css 파일의 매핑 테이블을 만들어야합니다).
  • 마스터 페이지 C #을 사용하여 사용할 HTML 파일 (css)을 html로 작성하십시오.

본질적으로 이는 클라이언트 기반의 런타임시 CSS 변경 사항을로드하므로 컴파일에 대해 걱정할 필요가 없습니다.

우리는이 과정을 다양한 색상의 스키닝에 성공적으로 사용했습니다. 우리의 폴더 시스템은 다음과 같습니다 :

  • 기본 -> 원본 Css 파일
  • 어두운 변화가있는 어두운 테마 -> 원본
  • 블루 테마
  • 핑크 테마 등

이후에 내가 aspnet_compiler.exe 도구로 달성 할 수 있는지 확실하지 않지만 여기에 간다 :

우리는 사용자가 마스터 페이지를 수정할 수 있도록하여 스킨을 적용 할 수 있도록 사이트를 만들었습니다. 대신 마스터 페이지 수정을 허용하지 않았으므로 수정을 위해 사용할 수있는 "마크 업"스타일 언어를 제공합니다. 그 페이지의 html은 본질적으로 사이트를 자신의 프론트 엔드처럼 보이게 할 수 있습니다.

나는보기와 aspx 페이지를 미리 컴파일하여 사이트를 최적화하려고 노력하고 싶다. 그러나 레이아웃과 마스터 페이지에서 해당 뷰와 페이지 USE를 업데이트 할 수있게하고 싶습니다. 그러나, 나는 그것을 일하게 할 수 없다 ...

다음 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 폴더에서 마스터 페이지 파일 인 Skin.Master 를 참조하는 파일. Skin.Master 는 업데이트 가능해야합니다. 다음은 내가 시도한 것입니다.

  • 이 aspnet_compiler.exe 명령을 사용하여 단순히 사이트를 컴파일하면 마스터 페이지도 컴파일되고 업데이트 할 수 없습니다.

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_compiler.exe -v / -pd:\SourceFolder d:\CompiledSite

  • aspnet_compiler.exe에서 skinable 폴더 (명령에 -x Skinable 추가)를 제외하면 폴더는 출력 폴더에 복사되지 않지만 마스터 페이지는 여전히 bin 폴더 (예 : skin.master.compiled 컴파일됩니다 skin.master.compiled 파일은 빌드 폴더에 생성됩니다. 마스터 페이지를 배포 폴더에 복사하면 해당 파일의 변경 사항이 무시됩니다 (컴파일시 마스터 페이지가 사용 된 것임).

  • aspnet_compiler ( attrib +hd:\SourceFolder\Skinable )를 실행하기 전에 Skinable 폴더를 숨기면 위와 같은 결과를 얻습니다 (즉, -x 플래그를 사용하지 않을 경우)

  • aspnet_compiler.exe를 실행할 때 -u 플래그 (Updatable)를 지정하면, 솔직히 말해서 아무 것도 그 인스턴스에서 컴파일되지 않는 것처럼 보이기 때문에 컴파일이 즉시 수행됩니다. 당신이 페이지를 요청할 때, 요점은 무엇입니까?

  • 마지막으로, 모든 것을 컴파일 한 다음 bin 폴더로 이동하고 skin.master.compiled를 삭제하면 해당 마스터 페이지를 사용하는 페이지를 요청할 때 "파일 'Skin.master'에 오류가 발생합니다. 미리 컴파일되어 요청할 수 없다 "

마스터 페이지에 대한 참조가 여기에있는 문제라고 생각합니다. 즉, 페이지가 마스터 페이지를 참조하면 페이지를 컴파일하려는 경우 해당 마스터 페이지도 컴파일해야합니다. 그러나 확실하지 않습니다. 내가 여기 숨어있는 것일까?





aspnet-compiler