none
C++/CLI 프로젝트 질문입니다. RRS feed

  • 질문

  • C++/CLI 닷넷 버전을 2.0으로 해서 개발을 하고 싶습니다.

    프로젝트를 생성할때 닷넷 버전을 2.0으로 선택을 하고 만들어서 

    컴파일을 하고 생성된 DLL의 런타임 버전을 보면 닷넷 4.0버전으로 나와서

    C# 닷넷 버전2.0에서는 사용을 못합니다.

    혹시 C++/CLI 닷넷 버전이 비주얼 스튜디오 버전과 관련이있는지 궁금해서 질문 올려봅니다.

    플랫폼 도구집한 V100으로 컴파일을 하면 C++/CLI DLL 런타임 버전이 닷넷 3.5로 나오는지 궁금합니다.


    2017년 1월 23일 월요일 오전 1:18

답변

  • 그러네요..

    단순히 #include 만 해도 .net version이 변경됩니다.(VS2015 테스트)

    Visual studio 2012 이상은 기본적으로 .Net framewrok 4.0을 대상으로 하므로 2008 버전을 사용해보시는건 어떤가요?

    vs2008은 PlatformToolset이 v90입니다.

    비슷한 문제가 있어 링크 추가합니다.

    https://connect.microsoft.com/VisualStudio/feedback/details/780602/compiling-c-clr-dll-in-vs-2012-targeting-net-2-0-introduces-indirect-dependency-on-net-4-0#tabs

    • 편집됨 Scott Park 2017년 1월 23일 월요일 오전 4:47
    • 답변으로 표시됨 Kim_Hyun 2017년 1월 23일 월요일 오전 5:07
    2017년 1월 23일 월요일 오전 4:47
  • VS2008에서 프로젝트 만들고 테스트해봤습니다.

    2.0하고 4.0 하고 같이 올라오는데 아마도 4.0이 2.0을 포함하고 있어서 그런것 같습니다.

    JIT는 2.0으로 올라오는거보면 어셈블리는 2.0걸 쓰는게 맞는것 같습니다.

    • 답변으로 표시됨 Kim_Hyun 2017년 1월 23일 월요일 오전 5:07
    2017년 1월 23일 월요일 오전 4:59
  • 네 그렇습니다.

    .NET framwork자체가 Just-In-Time compiler라고 합니다.

    이에 대한것은 암시적 컴파일(Implicit compilation)에 대해 알고계시면 좀더 수월 하실거에요.

    간단하게 설명하면.. 두 단계로 구분할 수 있는데요.

    처음은 컴파일러(Visaul studio에 있는)가 C로 작성된 코드를 IL(Intermediate Language)이라고 불리는 코드로 변경합니다.

    두번째는 실행시(Runtime)에 IL코드가 asm으로 변환되어 memory에 올라가고 이를 cpu가 읽고 실행시켜주는거죠.

    그래서 .NET Framwork를 JIT라고 불리웁니다.

    • 답변으로 표시됨 Kim_Hyun 2017년 1월 23일 월요일 오후 1:29
    2017년 1월 23일 월요일 오전 5:46

모든 응답

  • 그러네요..

    단순히 #include 만 해도 .net version이 변경됩니다.(VS2015 테스트)

    Visual studio 2012 이상은 기본적으로 .Net framewrok 4.0을 대상으로 하므로 2008 버전을 사용해보시는건 어떤가요?

    vs2008은 PlatformToolset이 v90입니다.

    비슷한 문제가 있어 링크 추가합니다.

    https://connect.microsoft.com/VisualStudio/feedback/details/780602/compiling-c-clr-dll-in-vs-2012-targeting-net-2-0-introduces-indirect-dependency-on-net-4-0#tabs

    • 편집됨 Scott Park 2017년 1월 23일 월요일 오전 4:47
    • 답변으로 표시됨 Kim_Hyun 2017년 1월 23일 월요일 오전 5:07
    2017년 1월 23일 월요일 오전 4:47
  • VS2008에서 프로젝트 만들고 테스트해봤습니다.

    2.0하고 4.0 하고 같이 올라오는데 아마도 4.0이 2.0을 포함하고 있어서 그런것 같습니다.

    JIT는 2.0으로 올라오는거보면 어셈블리는 2.0걸 쓰는게 맞는것 같습니다.

    • 답변으로 표시됨 Kim_Hyun 2017년 1월 23일 월요일 오전 5:07
    2017년 1월 23일 월요일 오전 4:59
  • 답글 감사합니다~

    저도 글 올리고 여기저기서 비주얼 스튜디오 2008 하고 2010 을 구해서 실험을 해밨습니다. 

    그래도 런타임 버전이 4.0으로 되는걸보면 어떻게 해야할지 막막할 뿐입니다.

    답변중에 제가 이해 못하는 부분이 JIT<< 이걸 저는 처음 들어서 

    검색해보니 컴파일러같은대용 JIT로 컴파일을 하면 버전이 2.0으로 되는건가요?

    2017년 1월 23일 월요일 오전 5:07
  • 네 그렇습니다.

    .NET framwork자체가 Just-In-Time compiler라고 합니다.

    이에 대한것은 암시적 컴파일(Implicit compilation)에 대해 알고계시면 좀더 수월 하실거에요.

    간단하게 설명하면.. 두 단계로 구분할 수 있는데요.

    처음은 컴파일러(Visaul studio에 있는)가 C로 작성된 코드를 IL(Intermediate Language)이라고 불리는 코드로 변경합니다.

    두번째는 실행시(Runtime)에 IL코드가 asm으로 변환되어 memory에 올라가고 이를 cpu가 읽고 실행시켜주는거죠.

    그래서 .NET Framwork를 JIT라고 불리웁니다.

    • 답변으로 표시됨 Kim_Hyun 2017년 1월 23일 월요일 오후 1:29
    2017년 1월 23일 월요일 오전 5:46
  • 정말 감사합니다. 자세한 설명까지 

    감사합니다~ 덕분에 막힌듯한 느낌이 싹 없어졌습니다~

    2017년 1월 23일 월요일 오후 1:29