IT 살이 썸네일형 리스트형 .NET Framework의 심볼 파일(.pdb)들이 공개되었습니다. Visual Studio 2008을 통해서 .NET Framework( v3.5 )의 일부 라이브러리들의 소스 코드를 볼 수 있다는 소식이 발표되었습니다. .NET Framework Library Source Code now available http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx VS 2008을 이용해서 .NET Framework 디버깅하기 위한 자세한 설정 내용은 다음 포스트를 참조할 수 있습니다. Configuring Visual Studio to Debug .NET Framework Source Code http://blogs.msdn.com/sburke.. 더보기 WCF세미나 - MSDN 주간 세미나 (11월 28일)-유경상 수석 유경상 수석의 WCF MSDN 세미나 동영상이 포스팅되었습니다. 유경상 수석 특유의 치밀하고 합리적인 설명이 돋보이는 세미나입니다. http://www.simpleisbest.net/archive/2007/12/03/1978.aspx 더보기 ClickOnce 인증서 만료 문제 ■ 이미 배포한 애플리케이션의 경우 .NETv2.0기반의 ClickOnce 애플리케이션에서는 인증서가 만료된 경우 만료 기간을 연장하여 업데이트를 할 수 없습니다. 만료 기간을 연장하면 전혀 새로운 인증서가 되어 버립니다. 따라서 인증서가 만료되면 기존의 ClickOnce 애플리케이션을 프로그램추가/제거에서 삭제하고 다시 설치해야 합니다. 구글링을 해보면 이를 해결하기 위한 노력이 있습니다. 그중에서 다음 링크는 그동안 봐 왔던 해결책중에서 개인적으로 제일 맘에 듭니다. ClickOnce and Expiring Code Signing Certificates http://www.jamesharte.com/blog/?p=11 모든 사용자들이 프로그램 추가/제거에서 애플리케이션을 삭제하고 다시 설치하는 작업이.. 더보기 트랜잭션 NTFS TxF( 트랜잭션 NTFS ) = 트랜잭션 + NTFS 파일 시스템을 트랜잭션 바운더리에 포함시킬 수 있게 되었다는 소식은 풍문으로 들어 알고 있었습니다. MSDN 매거진을 읽다가 이에 대한 구체적인 문서가 있어서 메모해 둡니다. 파일 시스템 트랜잭션으로 응용 프로그램 향상 http://msdn.microsoft.com/msdnmag/issues/07/07/NTFS/default.aspx?loc=ko 더보기 LINQ 시리즈 11 - LINQ 마구잡이 마무리 앞에서 쿼리 표현식의 where는 C#의 Where 메소드로 변환된다고 했다. 즉 LINQ 쿼리는 몇 개의 쿼리용 오퍼레이터로 구성된다. 그리고 그 쿼리용 오퍼레이터는 IEnumerable를 구현하는 어떤 타입들의 확장 메소드들이다. IEnumerable를 구현하는 모든 타입의 객체에 대해서 Where 메소드를 호출할 수 있다는 것이다. LINQ 쿼리가 이런 확장 메소드들을 기반으로 하고 있다는 것은 매우 확장적이다. 확장스럽다. 확장답다^^ 확장!확장! 기본적으로 지금 C#3.0에서부터 제공하고 있는 쿼리용 오퍼레이터들은 IEnumerable를 확장한 메소드들이다. 현재도 많은 리스트 타입들이 IEnumerable 인터페이스를 구현하고 있기때문에, 이런 확장 메소드를 사용하는 방법은 LINQ를 일반적인.. 더보기 LINQ 시리즈 10 - 쿼리 표현식(Query expression) 이해 이제 앞에서부터 계속 사용해온 쿼리 표현식을 이해해보자. Customer[] customers = GetCustomers(); //Query expression var query = from c in customers where c.Discount > 3 orderby c.Discount select new { c.Name, Perc = c.Discount / 100 }; C# 컴파일러는 쿼리 표현식을 만나면 C# 의 클래스와 인터페이스를 사용하는 표현으로 전환한다. // C# 표현 var query = customers .Where ( c => c.Discount > 3 ) .OrderBy( c=>c.Discount ) .Select ( c=> new { c.Name, Perc = c.Discount .. 더보기 LINQ 시리즈 09 - type inference(타입 유추) 좀 더 타입 유추가 어떻게 일어나는지 그 프로세스에 대한 설명을 하지 않고 지날 수 있기를 바랐는데, 그렇게 되지 못했다. 앞 포스트에서 말한대로 이번 포스트는 타입 유추대한 좀 더 자세한 과정을 알아보도록 한다. 타입 유추가 왜 일어나야 하는가. CLR은 타입 유추를 못하기때문이다. C#이 컴파일하고 나서 코드가 CLR로 넘어가기 전에는 모든 변수, 인자, 파라미터들의 타입이 결정되어 있어야 한다는 것이다. 해서 타입이 지정되지 않은 람다 표현식이 제네릭 메소드의 인자로 넘겨지면 컴파일시 타입 유추가 수행되어야 한다는 것이고 그 유추 과정을 같이 한번 더듬에 보자는 것이 이번 포스트 내용이다. 앞에서 본 코드이다. public static void Display(T[] names, Func filter) { .. 더보기 LINQ 시리즈 08 - 메소드 확장( Extension Methods) 객체 지향을 지원하는 언어에서 타입을 확장하는 방법하면 제일 먼저 떠오르는 것은 바로 상속(inheritance)에 의한 메소드의 오버라이딩 또는 오버로딩 또는 하이딩(hinding)이다. 혹시 이 세가지 개념이 구분이 잘 가지 않는다면 구글링을 한번 해 보자. 여튼 타입 확장 하면 상속이라는 것이 제일 먼저 떠오르는 것은 당연하다. 근데 C#3.0부터 새로운 확장 방법을 제공하고 있으니 "메소드를 확장"할 수 있다는 것이다. 즉 사용자 정의 메소드를 마치 원래의 그 타입의 메소드에서 정의한 것처럼 호출해서 사용할 수 있다는 것이다. 클래스에 Sealed로 해서 상속을 허락하지 않는 타입에서도 이런 메소드를 확장하는 방법이 가능하다. C#의 이런 능력은 LINQ문이 좀 더 읽기 쉽고 코딩하기 쉽게 해준다.. 더보기 LINQ 시리즈 07 - 람다 표현식(lamda expressions) 람다 표현식. 참 이름도 신기하다. 이 녀석을 뭔지 미리 말하면 이렇다. 델리게이트가 사용될 자리에서 매우 심플한 표현으로 대신할 수 있는 녀석이다. Customer[] customers = GetCustomers(); //LINQ 쿼리문 var query = from c in customers where c.Discount > 3 orderby c.Discount select new { c.Name, Perc = c.Discount / 100 }; // C# 표현 var query = customers .Where ( c => c.Discount > 3 ) .OrderBy( c=>c.Discount ) .Select ( c=> new { c.Name, Perc = c.Discount /100 } ); .. 더보기 LINQ 시리즈 06 - Object initializer, 익명 타입(anonymous types) II 앞의 포스트에서 Object initializer에 대해서 알아봤다. 먼저 읽어보는 것이 좋을 듯 싶다. 이제 익명 타입(anonymous types)을 알아보자. C#3.0부터는 다음과 같은 표현이 가능해진다. Customer c1 = new Customer{ Name="달봉이"}; var c2 = new Customer{Name="봉달이"}; var c3 = new {Name="봉봉이", Age=30 }; var c4 = new {c2.Name, c2.Age }; var c5 = new { c1.Name, c1.City}; var c6 = new {c1.City, c1.Name}; c1 생성은 앞에서 배운 객체 초기화 코드이다. c2는 Customer 객체를 초기화해서 var 타입에 할당하고 있다. .. 더보기 LINQ 시리즈 05 - Object initializer, 익명 타입(anonymous types) I 현재 시리즈 제목 "LINQ시리즈"이다. 그러나 아직 본격적인 LINQ에는 들어가지도 못하고 있다. 지금 하나씩 설명하고 있는 단위 기술들 델리게이트, 익명 메소드, 제네릭, 타입 유추, 익명 타입 그리고 앞으로도 배울 람다 표현식을 포함한 몇 가지는 그 자체만으로도 가치가 있는 기술들이기는 하지만 뒤에서 설명할 LINQ에서 조합되어서 그 효과를 발휘하게 될 것이다. 그래서 표현식은 아조 아조 심플하게 변하게 된다. 한번 더 볼까나. var query = from c in customers where c.Discount > 3 orderby c.Discount select new { c.Name, Perc = c.Discount / 100 }; 이렇게 간단한 표현속에 그렇게 많은 개념과 기술이 들어가 있.. 더보기 LINQ 시리즈 04 - type inference( 타입 유추 ) C#(3.0이상)의 타입 유추(type inference)는 쿼리 표현을 단순하게 만드는데 있어서 핵심적인 역할을 하는 기능중의 하나이다. 쉽게 말하면 변수의 타입을 정확히 명시하지 않고도, 앞 뒤 표현 문맥을 통해서 그 변수의 타입을 유추해 낼 수 있는 기능이다. 이 기능을 이용하면 변수의 타입에 대해서는 좀 덜 명확하게 되기는 하지만 "코드"가 좀 더 자연스런 언어처럼 된다. 여기서 "코드"란 쿼리 표현(query expression)을 말한다. 즉 쿼리 표현에서 처럼 자연스러움 즉 읽기 편함(readability)이 중요하고 명확한 타입 선언이 반드시 필요한 곳이 아니라면 타입 유추 기능은 의미를 갖게 된다. 사실 타입 유추 자체만으로는 그렇게 큰 의미가 없는 듯하다. 그러나 언어의 다른 기능과 함.. 더보기 LINQ 시리즈 03 - 제네릭(Generics) 제네릭이 뭔지 알아본다. LINQ 표현에 제네릭이 직접 표현되지 않더라도, C# 표현으로 변경하면 보이지 않던 제네릭 표현이 나타나게 된다. C# 표현의 쿼리를 이해할 수 있어야 LINQ 표현을 정확히 이해할 수 있는 바, 이 녀석을 모르고서는 LINQ 표현을 제대로 이해할 수 없다는 얘기가 되겠다. 다음과 같은 상황을 생각해보자. 메소드나 클래스를 정의할때 그 구성 요소에 대한 타입을 미리 알 수 없을때, 즉 여러 타입을 지원하고 싶을때 어떻게 해야 하나. object 타입을 사용하면 될 거라고 생각하고 있나. C# 1.X까지는 정답이다. 다음은 IList 타입의 컬렉션의 Add() 메소드에 대한 정의이다. public interface IList : ICollection, IEnumerable { i.. 더보기 LINQ 시리즈 02 - 익명 메소드(anonymous method ) 앞의 포스트에서 다음 코드를 보았다. delegate void SimpleDelegate(); public class Writer { public string Text; public int Counter; public void Dump() { Console.WriteLine(Text); Counter++; } } public class DemoDelegate { void Repeat10Times(SimpleDelegate somework) { for (int i = 0; i < 10; i++) somework(); } void Run1() { Writer writer = new Writer(); writer.Text = "C# demo"; this.Repeat10Times(writer.Dump); Con.. 더보기 LINQ 시리즈 01 - 델리게이트(delegate ) 앞에서 얘기한대로 이제 C#언어에 대해서 알아보겠다. LINQ 쿼리문을 이해하기 위해서 필요한 C#언어 요소들을 하나씩 알아가보겠다. 먼저 델리게이트 ! 델리게이트하면 필자에게는 다음과 같은 내용이 떠오른다. ▶클래스와 같은 일종의 타입이다. 다음과 같은 방법으로 델리게이트 타입을 정의한다. delegate void TwoParamsDelegate(string name, int age); ▶이것도 타입이니 인스턴스를 만들 수 있다. TwoParamsDelegate c = new TwoParamsDelegate(인자); ▶델리게이트 타입의 객체에는 다른 객체의 메소드에 대한 포인터가 할당된다. 앞의 TwoParamsDelegate 델리게이트 타입은 파라미터로 string, int 타입의 값을 받고 void.. 더보기 LINQ 시리즈 00 - 들어가기 Application Block같은 .NET용 개발 프레임웤을 보면 이제 제너릭 정도는 자연스럽게 사용되고 있다. 프레임웤에 대한 공부를 더 진행하기 전에 이쯤해서 C#에 대한 정리를 해야 할 것 같다. 그러나 하는 김에 제너릭뿐만 아니라 C#3.0이상에서 소개하고 있는 표현들에 대한 정리도 해 볼려고 한다. 그러나 필자도 아직 다 공부를 못한 부분이기에 시간이 좀 걸려서 진행될 것 같은 분위기다. 이번 포스트부터도 연재 형태로 갈려고 한다. 최종 목표는 LINQ라는 것의 이해이다. 해서 연재 제목을 이름하여 "LINQ 시리즈"로 정했다. 들어가기 전에 먼저 하나 생각해 보도록 하자. 고객이 여러명 있다. 이 고객들에 대한 정보가 어떤 형태로 있을 수 있을까? 우선 Customer라는 사용자 정의 타입이.. 더보기 Documents and Settings 이 보이지 않는다. 사용자 프로파일별 폴더와 데이터가 저장되던 "Documents and Settings"라는 폴더의 이름이 달봉이에게는 이상하게 보였는데, 이것이 없어질 모양이다. 이 폴더 역할을 하는 새로운 폴더가 Vista에서는 "사용자"라는 좀 더 그럴싸한 이름으로 생기게 되었다. 그러나 "Documents and Settings" 폴더도 완전히 없어진 것은 아니다. 내부적으로 숨겨져 있고 NTFS 퍼미션을 설정해서 "Everyone 그룹"이 "Documents and Settings"에 접근해서 읽을 수 없도록 했다. 결국 직접 "Document and Settings"폴더에 직접 접근해서 데이터를 쓰려고 하면 실패하게 될 것이다. 그럼, 이전에 "Documents and Settings"라는 폴더에 데이터를 쓰던.. 더보기 Vista의 가상화(Virtualization) Vista에서는 일반 사용자(Administrators 그룹에 속한 사용자 포함)는 시스템에서 보호되는 디렉토리 또는 레지스트리에 직접 쓰지 못하도록 하고 있다. 보호받는 디렉토리와 레지스트리 경로는 다음과 같다. (%SYSTEMROOT%, %PROGRAMDATA%, %PROGRAMFILES%\(서브디렉토리) HKEY_LOCAL_MACHINE\SOFTWARE 그럼, 기존에 이런 곳에 접근해서 데이터를 저장하고 있는 어플리케이션은 모두 사용할 수 없게 되는 것인가. Vista에서는 "임시"로 이런 어플리케이션의 호환성을 위하여 가상화 기술을 도입하고 있다. 어플리케이션에서 보호받는 디렉토리와 레지스트리에 데이터를 쓰려고 하면 Vista에서는 런타임시 그 경로를 사용자별 경로로 자동으로 변경시켜 준다. %S.. 더보기 내 PC의 UAC정책 설정 내용을 보자. 그룹 정책 편집기를 실행시켜 보면 현재 내 PC에 설정된 정책 내용을 볼 수 있는데, 이곳에서 UAC 정책 설정 내용도 볼 수 있다. "시작->검색 시작->gpedit.msc" "로컬 컴퓨터 정책->컴퓨터 구성->Windows 설정->보안설정->로컬 정책->보안 옵션"을 선택하면 그림과 같은 내용의 UAC 설정을 볼 수 있다. [그림] 내 PC의 UAC 정책 설정 이 설정 내용을 보면 UAC에 의해서 어떤 일들이 일어나는지를 알 수 있고 그래서 UAC 개념에 대한 이해에도 도움이 될 것이다. 다음은 각 정책을 더블 클릭했을 때 나오는 설명들로서, 몇가지 확인해봐야 하는 내용도 있지만 그대로 복사해 놓고 있다. 1. 각 사용자 위치에 파일이나 레지스트리를 쓰기 오류 발생할 때 가상화 : 사용 사용자 계정 .. 더보기 기본 제공 관리자(built-in Adminitrator) 계정을 보여줘 Administrators 그룹에 속한 관리자와 기본 제공 관리자(Built-in Administrator)는 구분된다. 기본 제공 관리자는 UAC의 적용을 받지 않는다(Administrator 여부를 체크하지 않는다기 보다는). 따라서 높은 권한을 필요로 하는 프로세스를 실행시키더라도 보안창을 띄우지 않는다. 그러나 기본 제공 관리자 계정으로 로그온하는 것은 Vista에서는 비추천이다. 하여튼, 처음 Vista를 설치해서 로그인을 하려고 하면 Administrator 계정이 보이지 않는다. 달봉이는 약간 당황했다. [그림] 로그온 계정 Vista에서는 기본적으로 이 관리자 계정은 사용하지 못하도록 설정되어 있다. 이 계정이 나타나도록 하려면 설정을 하나 변경해야 한다. 시작->실행-> gpedit.ms.. 더보기 이전 1 ··· 12 13 14 15 16 다음