DES 암호화나 Base64 에 대한 설명은 하지않겠습니다.(구글이나 네이버 검색하세요. ^^ )

CBC 와 PKCS7 에 대한 설명은 http://blog.cjred.net/141 를 참고하세요.



Posted by 빨강토끼
TAG BASE64, c#, des
닷넷 플레임워크와 Visual Studio는 모두 Side-by-Side 설치를 지원합니다.
하나의 컴퓨터에 여러 버전의 닷넷 프레임워크와 Visual Studio를 설치할수있습니다.
예를 들어 Windows XP SP2가 설치되 컴퓨터에 Visual Studio 2003,2005,2008의 설치가 가능합니다.
이들은 모두 고유의 설치 디렉토리를 기지므로 설치 상 출동이 발생하지 않는다.

Visual Studio를 제외한 닷넷 프레임워크만 설치하는 경우 좋은 점은
설치 순서가 중요하지 않다는 것입니다.
즉, 2.0을 먼저 설치하였더라도 나중에 1.1을 설치할 수 있습니다.
3.0을 설치하면 2.0은 자동으로 설치되며 3.5를 설치하면 2.0 및 3.0이 설치된다.
그러므로 해당 하위프레임워크는 설치하지 않아도 된다.
그러나 3.0 이나 3.5를 설치하더라도 1.1은 자동으로 설치되지않습니다.

Visual Studio 는 개발도구의 설정이 서로 공유되는 부분이 있어 설치 순서를 맞추는것이 좋습니다.
가급적이면 2003.2005,2008 의 순서를 따르는 것이 좋습니다.
그리고 2008을 설치하고자 하는 경우, 2005는 철치하지 않아도 되는데 2008 버전이
2005 버전에 대한 상위 집합으로써 2005가 갖는 모든 기능을 포함하기 때문입니다.

아래는 Side-by-Side 설치시 권고 사항입니다.
  • 닷넷 프레임워크 1.0과 Visual Studio.NET은 가급적 사용하지 않는다.대신 1.1을 사용하도록 한다.
  • Viusal Studio 버전은 출시 일정에 따라 2003,2005,2008 순으로 설치한다.
  • Visual Studio의 여러 버전을 설치 한 후, 언 인스톨을 하는 경우 이미 설치된 Visual Studio에 대해
    Repair를 수행한다.
  • Windows Vista는 Visual Studio 2003 버전을 지원하지 않으므로 설치 하지 않는다. 단 닷넷 프레임워크
    1.1은 설치하고 사용할 수 있다.
  • Windows Vista만 사용한다면 Visual Studio 2008에 한해 사용하는 것이 유리하다.
Windows Vista는 Visual Studio 2003을 지원하지 않음에 유의합니다.
설치는 가능하지만 레지스트리가 꼬이는 것은 물론 일부 작업 도중 Visual Studio가 다운 되는 현상도
발생하므로 가급적 사용하지 않는 것이 좋습니다.
또한 2005를 Windows Vista에서 사용하는 경우, 반드시 서비스 팩 1을 설치해야 할 뿐만 아니라
Update for Windows Vista 역시 설치해야 합니다.
Posted by 빨강토끼

저는 지금까지 개발작업을 하면서 SqlDataAdapter 를 사용하여 프로그래밍을 하였습니다.
SqlDataAdapter 가 더 좋은것이라는것을 알지만
그것 보다도

SqlDataReader 를 사용하여 프로그래밍을 하려고 할때

SqlCommand comm = new SqlCommand(쿼리문,DB연결)
SqlDataReader reader = comm.ExecuteReader();

While(reader.Read())
{
reader.GetInt64(0); // int i 열서수
...
}

이런식으로 reader 의 열서수만 넣을수있고 컬럼값을 넣지 못하는것때문에
번거롭기도 하고 코드를 수정하게 되면 문제가 생길소지가 있을것 같아서

처음에 번거롭더라도 SqlDataAdapter 를 사용하여 프로그래밍을 하였습니다.

그러다가 다른 방법이 있다는것을 알았습니다.

(Int64)reader["컬럼이름"]

이라고 입력하면 값을 얻을수있습니다.

reader.GetInt64(열서수)

(Int64)reader[열서수 or 열이름(컬럼이름)]

Posted by 빨강토끼
http://www.microsoft.com/korea/expression/
Posted by 빨강토끼
C# 3.0 이 나오는 마당에 불필요할것 같지만 메모해 봅니다.

제네릭 : 클래스나 메서드 정의 코드에서 데이터 형식이 결정되지 않고
형식 매개 변수에 따라 컴파일 시에 실제 형식이 결정된다.
http://redrebel.egloos.com/3936385

반복기 : foreach에서 사용 하는 IEnumerable과 IEnumerator 인터페이스를
자동으로 구현해 준다.

Nullable : 값 형식의 변수들이 null 값을 가질 수 있도록 하는 특수한 형식이다.

무명 메서드 : 대리자의 값이 필요한 정소에서 표준적인 메서드의 이름 대신
메서드 본체를 직접 정의한다.

partial 클래스 : partial 키워드를 사용하면 하나의 클래스(또는 인터페이스나 구조체)를
둘 이상의 파일로 나누어서 작성할 수 있다.
Posted by 빨강토끼
아래내용은 한빛미디어에서 출판된 조성진님의
ASP.NET 2.0 웹프로젝트와 실전 프로그래밍 의 내용을
참고하여 글을 썼습니다.

우연히 마소에서 제네릭이라는 것에 대하여 소개를 했던 기억이 있습니다.
그땐 이게 머지? 하며 그냥 넘어갔는데.

다시 제네릭이라는것을 접하게 되었습니다.
제네릭 컬렉션
제네릭 클래스
제네릭 메서드

우선 다음과 같은 코드의 소스가 있다고 하면은

ArrayList items = new ArrayList();

items.Add("문자열");
items.Add(200);

foreach(string val in items)
    Response.Write(val + "<br>");

이코딩은 두가지 문제점이 있습니다.
첫번째 문제점은 이렇게 코딩이 되어있다면 컨파일을 하는 중에는 에러가 생기지 않습니다.
하지만 실행 시에 에러가 발생합니다.
200 이라는 숫자가 ArrayList 에 들어가기 때문에
foreach 문이 실행중에 숫자를 string 형으로
변환하려고 하는중에 발생되는 에러입니다.
컴파일시에 에러가 발견되지 않고 실행을 해보고 나서야
에러가 발견된다는 것은 소프트웨어의 생산 능률을
저하시키는 요인이 될 수 있습니다.

두번째 문제점은 형식 변환으로 인한 퍼포먼스의 저하입니다.
ArrayList는 저장하는 모든 개체를 object 형식으로 변환하기 때문에
저장될때 형변환이 발생하고, 특히 int형을 object형으로 변환할 때 필요한
박싱(boxing) 처리가 수행되기 때문에 더 부담이 큽니다.
또한 다시 object 형을 string 형으로 다시 바꾸는 역변환이 발생합니다.
위 예제처럼 간단한 처리에는 표시가 나지않지만
ArrayList에 저장되는 데이터가 많아질 경우에는 반복적인 형변환과
박싱/언박싱 처리가 퍼포먼스에 치명적인 결함을 가져올 수 있습니다.

제네릭 컬렉션을 사용한 다른경우를 보면

System.Collections.Generic.List<int> values = new System.Collections.Generic.List<int>();


values.Add(100);
values.Add(200);

foreach(int val in values)
    Response.Write(val.ToString() + "<br>");

System.collections.Generic 네임스페이스에 있는 List<T> 클래스는
ArrayList 클래스의 제네릭 버젼입니다.

ArrayList 클래스는 모든 형식의 데이터를 object 형식으로 저장하는 반면
List<T> 클래스는 T에 지정된 형식의 데이터를 저장합니다.
T 자리에는 모든 데이터 형식이 지정될 수 있습니다.

List<string> oVar1;
List<DataTime> oVar2;
List<char> oVar3;
List<UserDefinedType> oVar4;   // UserDefineType은 사용자 정의 클래스 이름

위의 소스에서는 List<int> 라고 선언했으므로 형변환이나 박싱/언박싱이
발생되지 않습니다.
또한 만일 values.Add("텍스트") 라는 코드를 추가하면 컴파일 시간에 에러를
발견할수 있습니다.
이렇게 제네릭을 이용하면 모호한 형식에 의해 발생하는 결함들을
근본적으로 제거할 수 있습니다.

제네릭 컬렉션의 클래스들

.NET 1.x 컬렉션  /  .NET 2.0에 추가된 제네릭 컬렉션

ArrayList               /   List<T>

Hashtable             /   Dicrionary<TKey, TValue>

                                SortedDictionary<TKey, TValue>

SortedList             /   SortedList<TKey, TValue>

Queue                  /   Queue<T>

Stack                   /    Stack<T>


이와같이 제네릭 메서드 나 제네릭 클래스를 정의 할수있습니다.
제네릭 메서드 또는 클래스로 코드를 작성하면 컴파일러는
각형식의 메서드 또는 클래스가 정의 된것처럼 컴파일할 겁니다.

void MethodName<T>(T parm)
{
    Response.Write(parm.GetType().ToString();
}

MethodName<int>(10);
MethodName<string>("문자열")

위와 같이 되어있으면 컴파일러는 < 와 > 안에 지정한 형식과 일치하는 두종류의
메서드가 정의된 것처럼 컴파일 합니다.

void MethodName(int parm)
{
    Response.Write(parm.GetType().ToString());
}

void MethodName(string parm)
{
    Response.Write(parm.GetType().ToString());
}

또한 제네릭 메서드는 둘이상의 형식 매개 변수를 정의 할수있습니다.
void MethodName<T1, T2>(T1 parm1, T2 parm2)
{
    ...
}

그리고 제네릭 메서드는 좀더 편한 방법으로 호출할 수 있습니다.
MethodName(10, "문자열");
MethodName( "문자열", DateTime.Now);

이렇게 형식 매개 변수를 생략하고 호출하면, 메서드로 전달된 인자의 형식에 따라
컴파일러가 형식 매개 변수를 추론해서 생성합니다.

Posted by 빨강토끼
C# 자습서입니다.
코딩하다 막히는 부분이 있거나 코딩연습을 하고 싶은데 책상에 책을 펴놓고
공부하기에는 눈치가 보이는 직장인들에게 좋은 자습서가 될겁니다.

대부분의 윗분들은 모니터를 보면서 코딩을 하고 있으면 일을 하고있다고
생각할것이기 때문입니다.

http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/csref/html/vcoriCSharpTutorials.asp
Posted by 빨강토끼
아래와같은 에러가 뜨면 미칩니다.
인터넷을 돌아다녀봐도 별다는 해결책이나 왜그러는지 잘나와있지 않습니다.
물론 외국사이트에보면 해당되는 글들이 있곤 합니다.
하지만 별다는 설명이나 해결방법을 쉽게 찾을수 없더군요.

'/xxx' 응용 프로그램에 서버 오류가 있습니다.

--------------------------------------------------------------------------------



지정된 모듈을 찾을 수 없습니다. (예외가 발생한 HRESULT: 0x8007007E)

설명: 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 스택 추적을 검토하여 발생한 오류

및 코드에서 오류가 발생한 위치에 대한 자세한 정보를 확인하십시오.



예외 정보: System.IO.FileNotFoundException: 지정된 모듈을 찾을 수 없습니다. (예외가 발생한 HRESULT:

0x8007007E)



소스 오류:



현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 생성되었습니다. 아래의 예외 스택 추적을 사용하여 예

외의 원인 및 위치 정보를 확인할 수 있습니다. 



스택 추적:





[FileNotFoundException: 지정된 모듈을 찾을 수 없습니다. (예외가 발생한 HRESULT: 0x8007007E)]

  System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity,

Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)

+0

  System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity,

StackCrawlMark& stackMark, Boolean forIntrospection) +211

  System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity,

StackCrawlMark& stackMark, Boolean forIntrospection) +141

  System.Reflection.Assembly.Load(String assemblyString) +25

  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean

starDirective) +32



[ConfigurationErrorsException: 지정된 모듈을 찾을 수 없습니다. (예외가 발생한 HRESULT: 0x8007007E)]

  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean

starDirective) +596

  System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +3479081

  System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +46

  System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +177

  System.Web.Compilation.WebDirectoryBatchCompiler..ctor(VirtualDirectory vdir) +267

  System.Web.Compilation.BuildManager.BatchCompileWebDirectoryInternal(VirtualDirectory vdir, Boolean

ignoreErrors) +36

  System.Web.Compilation.BuildManager.BatchCompileWebDirectory(VirtualDirectory vdir, VirtualPath virtualDir,

Boolean ignoreErrors) +429

  System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) +73

  System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild,

Boolean allowCrossApp, Boolean allowBuildInPrecompile) +580

  System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath

virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile) +93

  System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext

context, Boolean allowCrossApp, Boolean noAssert) +111

  System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type

requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert) +54

  System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath

virtualPath, String physicalPath) +31

  System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String

requestType, VirtualPath virtualPath, String physicalPath) +40

  System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String

pathTranslated, Boolean useAppConfig) +139

  System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +120

  System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155









--------------------------------------------------------------------------------

버전 정보: Microsoft .NET Framework 버전:2.0.50727.42; ASP.NET 버전:2.0.50727.42


가장 큰 문제는 이러한 오류가 너무 일반적이고 포괄적이라서
마땅히 어디다고 딱찝어낼수가 없다는 것입니다.

하지만 ASP.NET 을 사용하고
사이트전체적으로 이러한 문제점이 나온다면
가장먼저 생각해볼것이
bin에 들어있는 dll 화일들입니다.
dll 화일이 1.x 버젼에서 만들어진 dll 이라던지
문제가 있는 dll 일경우 이런 현상이 나타납니다.
일단 dll 이나 lib 화일들을 하나씩 지우거나 잠시 bin폴더에서 이동해보세요.
그러다가 사이트의 페이지가 정상적으로 나오게 된다면
그 dll 이나 lib 화일이 문제였던것입니다.

그럼 그 dll 을 사용하고 싶다면 어떻게 해야하느냐...
역어셈블링 프로그램을 통하여 1.x 버젼 dll 을 2.0 용으로 바꿔줘야됩니다.
Posted by 빨강토끼
ASP.NET 으로 개발중에 기존의 유용한(?) DLL들을 사용하고 싶을때가 있을겁니다.
메뉴중에 웹사이트->참조 추가->COM 에 보면 개발PC에 있는 COM들이 보입니다.
거기서 선택을 하거나 찾아보기를 통하여 DLL을 찾은후 확인을 누르시면
현재작업하고 있는 사이트의 bin에 화일이 생길겁니다.

참조하는 방법은 여러가지가 있다고 하는데
일단 그중에 하나...
bin 화일에 보면 interop.XXX.dll 식으로 화일이 있는데
앞의 interop부분은 필요없고
xxx 부분만 쓰시면 됩니다.

aspx.cs 에서
using xxx;

라구요.

아님.
aspx 에서
<%@ Import Namespace="xxx"%>
라고 쓰시구요.

다음은 사용법입니다.

aspx 나 aspx.cs 에서
xxx 만 치시면....알아서 쭈욱....그담부턴 눈치것.....
머 제 설명이 그렇지요 머...

그럼...꾸벅.

Posted by 빨강토끼