ASP.NET WebForms Designer 파일을 강제로 다시 생성

이것은 비교적 짧은 게시물이 될 것입니다. 저는 ASP.NET WebForms 프로젝트를 MVC 프로젝트와 병합하는 회사와 협력하고 있습니다. 경험이었습니다.

원래 프로젝트가 웹 프로젝트가 아니라 웹 사이트였기 때문에 .aspx 파일이 미리 컴파일되지 않았기 때문입니다. 이 두 프로젝트를 병합하면서 웹 프로젝트 + MVC로 이동하여 컴파일 단계를 이점으로 얻을 수 있기를 원했습니다.

이 프로젝트는 상당히 규모가 크며 사용자 컨트롤을 제외하고 대부분 간단했습니다. 문제는 우리가 컴파일된 사용자 컨트롤로 이동한 후에 많은 이름을 변경해야 한다는 것입니다. 다 좋은데 Visual Studio는 정말 느리게 작업을 수행했고 저를 약간 미치게 만들었습니다. 이것의 일부는 저를 위해 Designer 파일을 재생성했기 때문입니다. 나는 내가 더 똑똑하다고 생각했고 Visual Studio 외부에서 많은 이름을 변경했습니다. 나는 아니었다.

.aspx 페이지가 디자이너 파일과 동기화되지 않았기 때문에 많은 오류가 발생했습니다. 거의 200개의 파일이 있으므로 각 파일을 열고 변경하고 저장하여 새 디자이너 파일을 얻는 것은 불가능했습니다.

운 좋게도 저는 트위터에 있습니다.

나는 손을 뻗어 내 엉덩이를 구했다. 나와 같은 경우 Visual Studio에서 매크로를 지원했던 때를 기억할 것입니다. Mick은 추가 기능을 설치하여 해당 기능을 다시 사용할 수 있다고 상기시켜 주었습니다.

Macros for Visual Studio



매크로를 설치한 후 예제 중 하나를 재작업하여 전체 프로젝트를 살펴보고 모든 디자이너 파일을 강제로 다시 생성했습니다. 누군가가 이 스크립트를 필요로 할 수도 있다고 생각했습니다. 여기있어:

// Based on the Headify example from https://github.com/Microsoft/VS-Macros

// Iterate over all files
iterateFiles();

function iterateFiles() {
  for (var i = 1; i <= dte.Solution.Projects.Count; i++) {
    iterateProjectFiles(dte.Solution.Projects.Item(i).ProjectItems);
  }
}

function iterateProjectFiles(projectItems) {
  for (var i = 1; i <= projectItems.Count; i++) {
    var file = projectItems.Item(i);

    if (file.SubProject != null) {
      formatFile(file);
      iterateProjectFiles(file.ProjectItems);
    } else if (file.ProjectItems != null && file.ProjectItems.Count > 0) {
      formatFile(file);
      iterateProjectFiles(file.ProjectItems);
    } else {
      formatFile(file);
    }
  }
}

function formatFile(file) {
  dte.ExecuteCommand("View.SolutionExplorer");
  if (file.Name.indexOf(".aspx", file.Name.length - ".aspx".length) !== -1) {
    file.Open();
    file.Document.Activate();

    // Add a space
    Macro.Inser
    dte.ActiveDocument.Selection.StartOfDocument(false);
    dte.ActiveDocument.Selection.Insert(" ");

    // Remove a Space
    dte.ActiveDocument.Selection.StartOfDocument(false);
    dte.ActiveDocument.Selection.Delete(1);

    // Save the document
    file.Document.Save();
    file.Document.Close();
  }
}



코드를 읽으면 모든 파일을 반복한 다음 formatFile()을 호출하는 것을 볼 수 있습니다. 형식 파일에서 .aspx 파일임을 확인한 다음 파일 맨 위에 공간을 추가합니다. 해당 공간을 삭제(파일을 강제로 변경하기 위해)한 다음 저장하고 닫습니다(디자이너를 다시 생성함). 파일).

이것을 실행하고 완료될 때까지 20분 동안 기다렸다가 짜잔!

레거시 프로젝트 작업을 좋아하는 사람은 없지만 이와 같이 이상하고 미친 수정으로 고객을 도울 수 있어서 기쁩니다.

HTH



Shawn Wildermuth의 이 저작물은 Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License에 따라 라이선스가 부여되었습니다.
wildermuth.com의 작업을 기반으로 합니다.


이 기사가 마음에 들면 Pluralsight에서 Shawn의 과정을 참조하십시오.

좋은 웹페이지 즐겨찾기