참조 된 DLL의 소스코드가 다 보입니다..

사용 툴 : Vs2022

A 라는 프로젝트에서 B 프로젝트(클래스 라이브러리) 를 DLL 파일로 만들어 참조하였습니다.

A 프로젝트에서 B 프로젝트의 메소드를 사용할 수 있도록 한 후에 해당 메소드의 정의 이동(F12 단축키)을 하게 되면 이 메소드의 소스코드가 보여지고 있는데요.

DLL에 있는 소스코드를 정의 이동을 해도 못 보게 할 수 있는 방법이 궁금합니다…

아래 그림은 위 내용을 캡쳐한 것 입니다.

질문1
A 프로젝트에서 B 프로젝트 DLL 의 isTest() 메소드를 호출…

질문2
호출한 isTest() 메소드의 정의 이동을 하게 되면 소스코드가 다 보여짐

1 Like

소스코드가 다 보여야 개발 및 디버깅 하기가 수월하실텐데 이게 어떤 말씀이지요?

1 Like

난독화를 적용해보세요~

2 Likes

java도 그렇고 4gl 언어는 원래 보여요 그건 c++로 만든 dll도 마찬가지예요

1 Like

혹시나,dll 파일을 누군가 열어서 소스코드 다 볼까봐서여 ㅎㅎ;

2 Likes

답변 감사합니다! 난독화에 대해 알아볼게요

1 Like

아…그런거군요…답변 감사해요!

1 Like

가장 쉬운 방법은 인터페이스를 제공해주시는 거 같습니다.

2 Likes

c++로 dll을 만들어서 사용해도 그런가요…?

1 Like

C#에서 같은 프로젝트로 만들어졌다면, 해당 B프로젝트의 C# DLL은 A프로젝트에 종속되어 있기 때문에, DLL에 디버깅이 될겁니다. 혹시 프로젝트가 아닌 솔루션으로 2개의 프로그램으로 분리하고 테스트 해보시는건 어떠실까요?

1 Like

비주얼 스튜디오에서 F12로 눌렀을 때, 구현이 보이지 않게만 원한다면,

public class Tester : ITestable
{
    // 생성자 비공개
    private Tester () { } 
    // 구현
    void IsTest() {  } 
    // 정적 생성자
    public static ITestable NewInstance() => Tester(); 
}

public interface ITestable {   void IsTest();  }

F12 를 누르면, 인터페이스 코드로 가기 때문에, 구현이 안보입니다.
그런데, 이는 개발자에게도 해당되기에 귀찮아 죽습니다. ^^

1 Like

앗 2개의 솔루션으로 나누진 상태고, A 솔루션 안에 a 프로젝트에 b 솔루션에 있는 b프로젝트를 dll 참조했어요!

1 Like

와!! 감사합니다…저렇게 하면 인터페이스 부분으로 디버깅 할 때 따라가서 불편한거죠…?

1 Like

기억이 명확하지는 않지만, 디버깅할 때는 구현 코드로 갔던 것 같습니다.
기억이 명확하지 않은 이유는 알아도, 잘 안썼기 때문입니다.

코드는 일반적으로 구현하고, Dispatcher 로 감싸는 방법도 있습니다만, 역시 귀찮습니다.
뚫을려고 맘먹은 천재들을 당할 재간은 없으니까요.

디버깅할 때, 다음 코드로(F10, F11)에서 노출이 안되게 하는 방법이 있긴하네요.

2 Likes

답변 감사합니다!!

2 Likes