2010-03-02 5 views
3

현재 진행되는 과정에서 여러 번 Visual Studio 디자이너가 코드를 잃어버린 수정 작업을했습니다. 예를 들어 디자이너 코드에서 수동으로 설정 한 이벤트 핸들러 배선이 손실되었습니다. 왜 이런 일이 일어나는 지 아는 사람이 있습니까?Visual Studio Designer에서 코드를 삭제하는 이유는 무엇입니까?

편집 :이 파일을 수동으로 편집하는 것은 좋은 생각이 아니지만 디자이너를 통해 설정 한 다른 이벤트 배선에서도 발생했습니다.

+8

아마도 디자이너 코드가 재생성 될 수있는 양식이나 디자이너 GUI를 조작했을 것입니다. 이러한 파일에는 일반적으로 헤더 텍스트가있어서 바로 그 이유 때문에 수동으로 변경하는 것에 대한 경고 메시지가 있습니다. – Lazarus

+0

코드를 마이크로 소프트 (디자이너와 같은 추상화를 통해)로 넘겨 줄 때 항상 코드가 어떻게 보이는지 알아야하기 때문에.내 충고는 이벤트 처리기를 설정하기 전에 *해야 할 일 (필요한 작업을 수행하는 경우) * 디자이너가 수행해야하는 모든 작업을 수행 한 다음 프로젝트에서 디자이너에게 다시 연락하지 않는 것입니다. – Robusto

+5

@robusto 우. 야, 그뿐 아니라 비실용적이긴하지만 그것도 무의미하다. 디자이너에서 생성 한 파일 내에서 코드를 편집하면 안됩니다. 간단합니다. 일반적으로 디자이너는 코드 숨김 파일을 설정합니다. 결코 다시 디자이너를 만지지 않습니까? 예, 실용적입니다. 더 이상 디자이너가 생성 한 파일은 절대 만지지 마십시오. – Will

답변

12

처음에는 designer.cs 파일 맨 위의 XML을 읽으십시오.

/// <summary> 
/// Required method for Designer support - do not modify 
/// contents of this method with the code editor. 
/// </summary> 
private void InitializeComponent() 

일반적으로 이러한 파일은 자동 생성 될 때 수정하면 안됩니다. 그것은 아마 부분적인 클래스의 하위에있는 브랜치 내에서 코드를 숨기려는 약간의 시도가있는 이유 일 것입니다.

가끔 병합해야했던 자동 생성 코드가 프로세스에서 제거 된 것으로 나타났습니다. 가장 일반적으로 사용자 지정 사용자 컨트롤을 더 이상 인스턴스화하지 않기로 결정했기 때문에 실행을 시작할 때 NullReferenceException을 얻는다.

정말 답은 InitializeComponent() 메소드를 호출하기 전에 생성자와 같이 코드를 다른 곳에 두는 것입니다. 동료 개발자가이 사실을 알지 못하면 개발자에게 알리고 교육해야하며, .designer.cs 파일이 이상한 확장 기능에 대해 더 새로운 개발자에게 질문을 제기해야합니다.

+0

해당 주석 _used_ (VS2005) 수 있습니다. 이후 버전에서는 대부분의 .Designer.cs 파일에 없습니다. 넌 지금 쯤 알면 돼. –

+0

당신이 그것을 고쳐야한다고 생각하지는 않지만 여기있는 모든 사람들은 아닙니다. –

+1

@Henk : 댓글은 VS2008에 여전히 존재합니다. VS2010에 대해서는 확실하지 않지만, 내가 그것을 꺼내는 이유를 볼 수는 없지만. – Ian

3

디자이너가 생성하고 다소 유지 관리되는 코드이기 때문에. 이 아닌을 추가하거나 수정 한 부분을 수동으로 디자이너 부분 클래스의 코드로 수정하는 것이 좋습니다 (생성 된 파일 자체에서이 문제가 언급 된 것 같습니다). 이벤트 핸들러를 수동으로 연결해야한다면 사용자 정의 코드에서 컨트롤의 생성자를 수행하십시오.

+1

+1 "다소 유지 코드". 저는 VS가 자신의 코드를 여러 번 뒤집어서 사용하는 것을 보았습니다 (메뉴 항목은 메뉴에서 사라지지만 여전히 존재하며 이미지는 x 번 포함됩니다). – Bobby

+1

@Bobby 예 때때로 메뉴 항목과 함께 악몽입니다. ​​디자이너 행동을 취소 할 때 수행하는 검은 마법 때문에 실행 취소 작업에 대해 묻습니다. –

5

너희들은 생성 된 코드 파일을 수정하지 않는다, 그렇지? MyForm.Designer.cs처럼? 이것이 우리에게 partial 클래스가 주어진 이유입니다.

0

자신의 .cs 파일에서만 필요한 초기화 코드를 모두 작성하십시오. 양식 생성자 및 양식로드 이벤트 핸들러와 같이이 작업을 수행 할 수있는 위치가 있습니다.

0

디자이너 코드를 사용자 유지 관리 코드 클래스로 이동하면 사용자 인터페이스를 수정할 수 있다는 이점이 없습니다. 아마도 이것은 프로그램을 다시 수정할 필요가 없다면 당신이하고 싶지 않을 수도 있지만, 그렇다면 이점은 어디에 있습니까?

Visual Studio가 처음 출시 된 이래로 디자이너 클래스의 코드를 잃어 버린이 문제는 프로그램이 이전에 수정되었을 때보 다 몇 주 전에 손실이 발생했기 때문에 나에게 무수한 악몽을 불러 일으켰습니다.

나는 그것을 증명할 수는 없지만 Microsoft의 코드 생성기에있는 어떤 것이 실패하고 있으며 충돌했다는 경고를하지 못한다는 것이 분명해 보입니다. 그래서, 마이크로 소프트는 ... 충돌하는 것을 수정하거나, 적어도 발생 시점에 대해 알려주십시오.

관련 문제