기본 콘텐츠로 건너뛰기

1월, 2014의 게시물 표시

[T4 TextTemplating] Compile 중에 Linq 를 찾을 수 없다는 오류

T4 TextTemplating Engine에서 ProcessTemplate 메서드를 실행하면 다음과 같은 오류가 발생하는 경우가 있다. "The type or namespace name 'Linq' does not exist in the namespace 'System' - are you missing and assembly reference? 오류 메시지에 표현된 것과 같이 컴파일을 하려고 하는데, Linq 네임스페이스를 찾을 수 없다는 문제다. 이론적으로는 System.Core.dll 의 참조가 필요한데, 참조가 되지 않았거나 다른 버전의 System 네임스페이스가 사용되고 있을 경우를 의심해 볼 필요가 있다. 당연히 T4 Template 파일에는 아래와 같이 관련된 어셈블리를 지정해 주었다. <#@ assembly name="System.Core" #> 여러 가지 경우의 수와 TextTemplating Engine의 구성을 확인해 보던 중에 Custom Template Engine Host 에 문제가 있는 것을 확인할 수 있었다. ITextTemplatingEngineHost 라는 것은 "처리 대상이 되는 텍스트 템플릿" 을 입력으로 받아서 처리된 텍스트 파일을 출력으로 반환하는 역할을 담당하는 것이다. 기본으로 제공되는 것은 "TextTemplatingFileGenerator" 다. 실제 구현한 Host에서 어셈블리 참조들을 아래의 코드와 같이 구성을 했었다. public IList<string> StandardAssemblyReferences { get { return new string[] { typeof(System.Uri).Assembly.Location , typeof(WizardDataObject).Assembly.Location, typeof(FrameworkContext).Asse

[Tips] Visual Studio 에서 특정 어셈블리의 PublicKeyToken 찾는 법

막상 Visual Studio로 개발을 하다보면 Configuration이나 VSTemplate의 Wizard 등에 어셈블리의 FullName을 명시해야 하는 경우가 있다.  이런 경우에 Namespace와 Assembly Name은 정보가 속성들을 보고 대략 유추가 가능한데, 정작 서명된 어셈블리에 대한 PublicKeyToken 정보는 찾을 수 없다. 따라서 간단하게 Visual Studio 상에서 PublicKeyToken을 찾는 방법을 정리해 둔다. [ VS 에서 PublicKeyToken 정보 찾기 ] 1. Visual Studio의 "도구" 메뉴에서 "외부 도구" 를 선택한다. 2. "외부 도구" 창에서 "추가"를 한다.     2.1 제목을 "Find PublicKeyToken" 으로 설정한다.     2.2 명령을 " C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" 로 설정한다.     2.3. 인수를 "-Tp $(TargetPath)" 로 설정한다.     2.4. "출력 창 사용" 항목을 Check 한다. 상기와 같이 설정을 처리하고 솔루션 탐색기에서 프로젝트를 선택하고 "도구" -> "Find PublicKeyToken" 메뉴를 클릭하면 "출력 창" 에 해당 어셈블리에서 대한 Key 정보를 볼 수 있다. [ VS 에서 어셈블리 FullName 찾기 ] 1. "Alt + Ctrl + i " 키를 눌러서 "직접 실행 창"을 연다. 2. 실행 창에 "?System.Reflection.Assembly.LoadFile(@"어셈블리 경로").FullName 을 실행

[Tips] Windows 8.1 Embedded Industry ActiveX 해결방법.

항상 OS를 설치하고 다이어트(?) 시키느라 고생도 많이 했는데, 나름 가볍다는 Embedded Version 을 설치해볼까? 하고 망설이면서도 유독 우리나라에서만 고집하고 있는 ActiveX 문제로 사용을 하지 못하고 있었다. 최근에 아래 사이트에서 이를 해결하는 방법을 찾았다고 올라온 글이 있어서 정리해 둔다. 참고 사이트 :  http://www.clien.net/cs2/bbs/board.php?bo_table=lecture&wr_id=204355 일단 문제가 없을지 플젝 끝나면 테스트해 볼 필요가 있을 듯...

[.NET] Configuration 암/복호화

.NET 2.0 이상부터는 ConfigurationSettings 가 아닌 ConfigurationManager 를 사용하게 된다. 그럼 ConfigurationManager의 특징들에 대해 정리해 놓도록 하자. AppSettings, ConnectionStrings 속성을 제공하기 때문에 바로 접근이 가능하다. 다른 섹션을 액세스하기 위해 GetSection 메서드를 사용하고, 다른 컴퓨터에 대한 모든 수준의 설정을 로컬 및 원격으로 읽고 쓰기가 가능하다. 설정에 대해서 다양한 작업을 지원한다. (SectionInformation, PropertyInformation, PropertyInformationCollection, ElementInformation, ContextInformation, ConfigurationSectionGroup, ConfigurationSectionGroupCollection, ...) RefreshSection 메서드를 이용해서 특정 Section 정보를 다시 읽을 수 있으며, Configuration 파일의 내용을 갱신할 수도 있다. (단, 주의할 부분은 Configuration 정보들이 읽기 전용이므로 Add 등의 작업은 불가능하며, 수정되는 경우도 machine.config 가 대상이 될 수 있으므로 특정한 파일을 처리하여야 하는 경우는 OpenExeConfiguration, OpenMachineConfigufation, OpenMappedExeConfiguration, OpenMappedMachineConfiguration, ... 등의 메서드를 이용해서 Configuration을 구성하고 처리하여야 한다) 위의 수정(저장) 기능은 다음과 같이 처리가 가능하다. ... string connStr = "server=(local);database=northwind;Integrated Security=SSPI;"; // open configuration file Con

[License] 라이센스 매니저?!

프로젝트 중에 3rd Party 제품군을 Trial 로 사용하다가 정식 버전을 구매해서 적용을 했는데, 이미 Trial 상태에서 Expire된 상태로 설치를 했더니... 계속 애매한 오류가 발생하는 것이 있어 라이센스 매니저에 대해서 정리를 해 보도록 한다. (OS 재 설치를 하지 않기 위해서 사실 우회하는 방법을 찾아 보고 있다고 해야 하는 것이 더 맞을 듯... -_-) 라이센스 관련된 부분은 기본적으로 .NET Framework에서 제공하는 라이센스 매니저 (LicenseManager) 를 사용하게 된다. 자세한 내용은 여기 를 참고하도록 하고, 기본적인 구현 방식은 아래와 같이 무척이나 간단하다. [LicenseProvider(typeof(CustomLicenseProvider))] pulic class CustomClass { ... public CustomClass() { LicenseManager.Validate(typeof(CustomClass), this); } ... } 위와 같이 라이센스를 적용할 클래스에 LicenseProvider 특성을 지정하고 생성자에서 LicenseManager에 Validation을 호출하면 된다. 당연히 라이센스를 검증하기 위한 처리는 LicenseProvider에 지정하면 된다. pulic class CustomLicenseProvider : System.ComponentModel.LicenseProvider { ... public override License GetLicense(LicenseContext context, Type type, object instance, bool allowExceptions) { return null; } ... } 검증 로직이야 작성하는 사람 맘대로이니.. 별다른 의미는 없고, 라이센스가 올바르다고 판단이 되는 경우

[DCAB.Fx] 기본적인 프레임워크 컨셉...

이런 저런  생각을 하던 끝에 가칭 DCAB.Fx 라는 이름을 사용하기로 했다. 뭔가 내가 하고자 하는 것을 잘 표현하는 것이 필요하지만 머리가 굳어가고 있는지... 전혀 생각이 넓게 퍼져나가지 못하고 있다. ㅠㅠ DCAB : Dynamic Composite Application Block Fx : Extensible Framework by Meta 나름 CAB / SCSF 쪽에 매력을 느끼고 있었던지라... 그 컨셉을 그대로 녹여(?) 보려고 하는 욕심에 정한 이름이지만 너무 평이한 것 같기도 하고... 아주 근본적인 컨셉 구상 막상 생각하고 어떤 방식으로 접근을 해야할지를 고민하고 있는데... 컨셉 그림을 그리고 보니... 너무 모르는 것이 많다.... 지금까지 뭔가 많이 한 것 같은데... 정작 시작하려고 하니... 몰라도 너무 모른다. 뭐, 시작이 반이니... 힘내서 열심히... ^^