Microsoft MVP성태의 닷넷 이야기
오류 유형: 43. System.ComponentModel.LicenseException [링크 복사], [링크+제목 복사],
조회: 28896
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)

System.ComponentModel.LicenseException


미리 말씀드리자면, 이번 오류의 직접적인 해답은 찾지를 못했습니다. 제 컴퓨터에서만 발생하는 것을 보면, x64 버전의 Vista 환경 때문인 것 같기도 하고, 또는 Orcas 베타 버전을 함께 설치해서 발생하는 것 같기도 합니다.

아무튼, ChartFX 컨트롤을 사용하는 시점부터, 빌드 시에 licenses.licx 파일 때문에 다음과 같은 오류가 발생을 했습니다.

------ Rebuild All started: Project: RealTimeCharts, Configuration: Release Any CPU ------
Properties\licenses.licx(10): 
error LC0004: Exception occurred creating type 
'ChartFX.WinForms.Chart, ChartFX.WinForms, Version=7.0.2664.18481, Culture=neutral, PublicKeyToken=a1878e2052c08dce' 
System.ComponentModel.LicenseException: 
Couldn't get Design Time license for 'ChartFX.WinForms.Chart'
Done building project "RealTimeCharts.csproj" -- FAILED.

좀 더 자세한 빌드 오류 정보를 얻기 위해, 아래와 같이 MSBuild 옵션을 조정했습니다.

lc_compile_error_1.png

그런 후, 빌드를 했더니 다음과 같은 명령행 정보를 알 수 있었습니다.

  Task "LC"
    Command:
    C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\bin\LC.exe 
    /target:RealTimeCharts.exe 
    /complist:Properties\licenses.licx 
    /outdir:obj\Debug\ 
    /i:"C:\Program Files (x86)\Chart FX for Visual Studio 2005\bin\ChartFX.WinForms.Adornments.dll" 
    /i:"C:\Program Files (x86)\Chart FX for Visual Studio 2005\bin\ChartFX.WinForms.Base.dll" 
    /i:"C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies\ChartFX.WinForms.dll" 
    /i:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll 
    /i:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Deployment.dll 
    /i:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Design.dll 
    /i:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll 
    /i:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll 
    /i:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Management.dll 
    /i:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll 
    /i:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll 
    The "LC" task is using "LC.exe" from 
      "C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\bin\LC.exe".
      
    Microsoft (R) .NET License Compiler 
    [Microsoft .Net Framework, Version 2.0.50727.1318]
    Copyright (c) Microsoft Corporation.  All rights reserved.
    
    Processing complist 'Properties\licenses.licx'...
    Properties\licenses.licx(1): 
    error LC0004: Exception occurred creating type 'ChartFX.WinForms.Chart, ChartFX.WinForms, 
    Version=7.0.2664.18481, Culture=neutral, PublicKeyToken=a1878e2052c08dce' 
    System.ComponentModel.LicenseException: 
      Couldn't get Design Time license for 'ChartFX.WinForms.Chart'
       at System.ComponentModel.LicenseManager.CreateWithContext(Type type, LicenseContext creationContext, Object[] args)
       at System.Tools.LicenseCompiler.Main(String[] args)
    The command exited with code -1.
  Done executing task "LC" -- FAILED.
Done building target "CompileLicxFiles" in project "RealTimeCharts.csproj" -- FAILED.

System.ComponentModel.LicenseException 예외를 설정해서 오류 내용을 살펴보면, ChartFX 생성자에서 발생하는 것을 알 수 있었습니다. 허허... 이것 참. 도대체 생성자에서 발생하면 어떡하라는 것인지.

Infragistics와는 달리, ChartFX는 소스 코드 공개는 고사하고 obfuscator 도구를 사용해서 IL 코드를 분석하기 어렵게 만들어 놓았습니다. 덕분에 시간내서 굳이 분석하고 싶은 마음마져 ^^; "고사"되어 버리더군요.

그럼, 이걸 어쩔까 생각하다가,,, 그냥 라이선스 파일에 대한 빌드 과정을 없애기로 했습니다.

이를 위해 다음과 같은 MSBuild 파일을 열어서,

VS.NET 2005 : C:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets
Orcas Beta1 : C:\Windows\Microsoft.NET\Framework\v3.5.20404\Microsoft.Common.targets
VS.NET 2008 : C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets

아래의 LC Task 부분을 주석 처리해 버렸습니다.

<Target
    Name="CompileLicxFiles"
    Condition="'@(_LicxFile)'!=''"
    DependsOnTargets="$(CompileLicxFilesDependsOn)"
    Inputs="$(MSBuildAllProjects);@(_LicxFile);@(ReferencePath);@(ReferenceDependencyPaths)"
    Outputs="$(IntermediateOutputPath)$(TargetFileName).licenses">

    <!--LC
        Sources="@(_LicxFile)"
        LicenseTarget="$(TargetFileName)"
        OutputDirectory="$(IntermediateOutputPath)"
        OutputLicense="$(IntermediateOutputPath)$(TargetFileName).licenses"
        ReferencedAssemblies="@(ReferencePath);@(ReferenceDependencyPaths)"
        ToolPath="$(LCToolPath)">

        <Output TaskParameter="OutputLicense" ItemName="CompiledLicenseFile"/>
        <Output TaskParameter="OutputLicense" ItemName="FileWrites"/>

    </LC-->
</Target>

어차피, 빌드 서버의 바이너리가 배포될 것이었기 때문에 제 노트북 PC의 빌드는 아무래도 좋았기 때문에.

그나저나... 이런 문제는 제발 발생하지 않았으면 좋겠습니다. 공수 산정하기도 어려운...



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/10/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2008-03-21 05시23분
64비트 OS에서의 ChartFX 라이선스 문제
; http://www.sysnet.pe.kr/2/0/537
kevin25

... 61  62  63  64  65  66  67  68  69  70  71  72  [73]  74  75  ...
NoWriterDateCnt.TitleFile(s)
12111정성태1/12/202020611디버깅 기술: 155. C# - KernelMemoryIO 드라이버를 이용해 실행 프로그램을 숨기는 방법(DKOM: Direct Kernel Object Modification) [16]파일 다운로드1
12110정성태1/11/202019979디버깅 기술: 154. Patch Guard로 인해 블루 스크린(BSOD)가 발생하는 사례 [5]파일 다운로드1
12109정성태1/10/202016650오류 유형: 588. Driver 프로젝트 빌드 오류 - Inf2Cat error -2: "Inf2Cat, signability test failed."
12108정성태1/10/202017477오류 유형: 587. Kernel Driver 시작 시 127(The specified procedure could not be found.) 오류 메시지 발생
12107정성태1/10/202018671.NET Framework: 877. C# - 프로세스의 모든 핸들을 열람 - 두 번째 이야기
12106정성태1/8/202019690VC++: 136. C++ - OSR Driver Loader와 같은 Legacy 커널 드라이버 설치 프로그램 제작 [1]
12105정성태1/8/202018197디버깅 기술: 153. C# - PEB를 조작해 로드된 DLL을 숨기는 방법
12104정성태1/7/202019428DDK: 9. 커널 메모리를 읽고 쓰는 NT Legacy driver와 C# 클라이언트 프로그램 [4]
12103정성태1/7/202022547DDK: 8. Visual Studio 2019 + WDK Legacy Driver 제작- Hello World 예제 [1]파일 다운로드2
12102정성태1/6/202018837디버깅 기술: 152. User 권한(Ring 3)의 프로그램에서 _ETHREAD 주소(및 커널 메모리를 읽을 수 있다면 _EPROCESS 주소) 구하는 방법
12101정성태1/5/202019208.NET Framework: 876. C# - PEB(Process Environment Block)를 통해 로드된 모듈 목록 열람
12100정성태1/3/202016622.NET Framework: 875. .NET 3.5 이하에서 IntPtr.Add 사용
12099정성태1/3/202019473디버깅 기술: 151. Windows 10 - Process Explorer로 확인한 Handle 정보를 windbg에서 조회 [1]
12098정성태1/2/202019286.NET Framework: 874. C# - 커널 구조체의 Offset 값을 하드 코딩하지 않고 사용하는 방법 [3]
12097정성태1/2/202017393디버깅 기술: 150. windbg - Wow64, x86, x64에서의 커널 구조체(예: TEB) 구조체 확인
12096정성태12/30/201919981디버깅 기술: 149. C# - DbgEng.dll을 이용한 간단한 디버거 제작 [1]
12095정성태12/27/201921722VC++: 135. C++ - string_view의 동작 방식
12094정성태12/26/201919398.NET Framework: 873. C# - 코드를 통해 PDB 심벌 파일 다운로드 방법
12093정성태12/26/201918994.NET Framework: 872. C# - 로딩된 Native DLL의 export 함수 목록 출력파일 다운로드1
12092정성태12/25/201917698디버깅 기술: 148. cdb.exe를 이용해 (ntdll.dll 등에 정의된) 커널 구조체 출력하는 방법
12091정성태12/25/201920060디버깅 기술: 147. pdb 파일을 다운로드하기 위한 symchk.exe 실행에 필요한 최소 파일 [1]
12090정성태12/24/201920138.NET Framework: 871. .NET AnyCPU로 빌드된 PE 헤더의 로딩 전/후 차이점 [1]파일 다운로드1
12089정성태12/23/201919087디버깅 기술: 146. gflags와 _CrtIsMemoryBlock을 이용한 Heap 메모리 손상 여부 체크
12088정성태12/23/201918048Linux: 28. Linux - 윈도우의 "Run as different user" 기능을 shell에서 실행하는 방법
12087정성태12/21/201918561디버깅 기술: 145. windbg/sos - Dictionary의 entries 배열 내용을 모두 덤프하는 방법 (do_hashtable.py) [1]
12086정성태12/20/201921093디버깅 기술: 144. windbg - Marshal.FreeHGlobal에서 발생한 덤프 분석 사례
... 61  62  63  64  65  66  67  68  69  70  71  72  [73]  74  75  ...