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

사용 툴 : Vs2022

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

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

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

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

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

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

1개의 좋아요

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

1개의 좋아요

난독화를 적용해보세요~

2개의 좋아요

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

1개의 좋아요

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

2개의 좋아요

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

1개의 좋아요

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

1개의 좋아요

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

2개의 좋아요

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

1개의 좋아요

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

1개의 좋아요

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

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

public interface ITestable {   void IsTest();  }

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

1개의 좋아요

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

1개의 좋아요

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

1개의 좋아요

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

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

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

2개의 좋아요

답변 감사합니다!!

2개의 좋아요