2009-08-06 5 views
3

내 C#/.NET 응용 프로그램이 내부적으로 작동하는 방식을 수정하고 싶습니다. Reflector로 .NET 프레임 워크를 파헤 치고 다른 구현 방법을 사용할 수있는 꽤 좋은 곳을 발견했습니다. 이 클래스는 System.Windows.Forms 네임 스페이스의 내부 클래스입니다. 당신은 분명히 일반적인 방법으로이 클래스의 코드를 변경할 수 없으므로 런타임에 리플렉션을 통해 거기에있는 메소드를 대체 할 수있을 것이라고 생각했습니다.내부 .NET 클래스의 메서드 구현 수정

internal sealed class System.Windows.Forms.Internal.WindowsFont

유형을로드하고 런타임에 방법을 대체 할 수있는 방법이 있나요 : 수업 시간에

public static WindowsFontQuality WindowsFontQualityFromTextRenderingHint(Graphics g)

: 나는 완전히 내 응용 프로그램에 대한 대체하고자하는 방법이있다 현재 실행 중이거나 이후에 시작된 다른 응용 프로그램에는 영향을주지 않습니까? 내가 Type.GetType()과 비슷한 것들을로드하려고했지만 지금까지 실패했습니다.

+0

좋아요, 지금은 "하지 마세요"와 "아마도 불법입니다"와 같은 답변을 받았습니다.필자의 경우 IE7의 동작을 ClearType에 복사하여 단일 응용 프로그램에서만 사용할 수 있는지 여부를보고 싶습니다. C++ 응용 프로그램이 있으면 글꼴을 만들 때 다른 FontQuality 값을 사용하도록 응용 프로그램을 수정할 수 있습니다. 그러나 관리되는 C#에서는 이것이 옵션이 아닙니다. 그래서 나는 보통 도달 할 수없는 기능에서 그 작은 변화를 만들려고 노력하고있었습니다. 그리고 실제로 불법적 인 작업으로, 사용 된 프레임 워크의 "결함"으로 인해 런타임에 내 응용 프로그램을 패치하고 있습니까? – ygoe

+0

어쨌든 다른 클래스의 메소드를 수정하여 소스 코드를 변경할 수 없습니까? 아니면 디자인에 의해 불가능하고 솔루션을 찾는 것을 멈출 수 있습니다 ... – ygoe

+0

그래서, 진짜 질문에 어떻게 ClearType에서 IE7 동작을 관리 코드로 복사 할 수 있습니다. – Avram

답변

8

당신은 일 수 있습니다.은 디버거 API로 이것을 수행 할 수 있습니다.하지만 정말 나쁜 생각입니다.

설치되어있는 디버거 후크를 사용하여 실행하는 것이 더 느릴 수 있습니다.하지만 더 중요한 것은 프레임 워크 코드를 함부로 변경하면 쉽게 예기치 않은 동작이 발생할 수 있습니다. 가능한 모든 시나리오에서 자신의 앱 내에서이 방법이 어떻게 사용되는지 정확하게 알고 있습니까?

변호사에게 문의해야하지만 바람직하지 않은 법적 결과가 발생할 수도 있습니다.

저는 개인적으로이 사고 방식을 포기하고 당신이하려는 일을 성취하기 위해 다른 방법을 시도합니다.

3
  1. 아무것도 당신이 어떤 .NET 프레임 워크 업데이트
  2. 당신이 달성하려고하는 일을 할 수있는 또 다른, 더 올바른 방법이 있어요 함께 휴식 수있는 지원되지 않는, 신뢰할 수없는 해킹 것 일어날 수 있도록 할 (그리고 나는 이것을 확실히 알기 위해 무엇을하려고하는지 알 필요가 없습니다.)

편집 : 핵심 프레임 워크 코드를 편집하는 것이 관심사 인 경우 Mono를 자유롭게 사용해보십시오. 그러나 응용 프로그램에 따라 수정 사항을 재배포 할 필요는 없습니다. :)

0

Myra에 대해서는 언급 할 수 없지만 명성 때문에. TS가 전체 .Net 함수를 대체하려고 시도하기 때문에 확장 메서드를 사용하는 것은 여기에 해당하지 않습니다. 이것은 실제로 매우 나쁜 아이디어입니다.

수정하려는 클래스를 상속하고 해당 속성을 재정의하십시오.

+0

수업이 봉쇄되었다. – Colin

0

변경 내용이 일반적인 경우 Microsoft에 기능 요청을하십시오.

1

나는 진짜로 생각한다. 이것은 좋은 생각이 아니다. 그러나 실제로 필요한 경우 Mono Cecil을 사용하고 어셈블리 내용을 변경할 수 있습니다. 그런 다음 Redirecting Assembly Versions에 대한 설정 파일을 설정해야합니다.

마지막으로, 귀하의 진출은 불법적 인 것으로 판명 될 것입니다.