asp.net 웹사이트의 공유 코드 폴더
웹 애플리케이션에 여러 페이지에서 공유하려는 코드가 포함되어 있는 경우 웹 애플리케이션의 루트 디렉터리에 있는 두 개의 특수 폴더(Bin 폴더 및 App_Code 폴더)에 코드를 파일로 저장할 수 있습니다. 이러한 폴더를 만들고 여기에 특정 유형의 파일을 저장하면 ASP.NET은 해당 파일을 특별한 방식으로 처리합니다.
Bin 폴더 컴파일된 어셈블리를 Bin 폴더에 저장할 수 있으며, 웹 응용 프로그램의 다른 코드(예: 페이지 코드)는 자동으로 폴더를 참조합니다. 일반적인 예는 사용자 정의 클래스에 대해 컴파일된 코드입니다. 모든 페이지에서 이 클래스를 사용할 수 있도록 컴파일된 어셈블리를 웹 응용 프로그램의 Bin 폴더에 복사할 수 있습니다.
Bin 폴더의 어셈블리는 등록할 필요가 없습니다. .dll 파일이 Bin 폴더에 존재하는 한 ASP.NET은 이를 인식합니다. .dll 파일을 변경하고 해당 파일의 새 버전을 Bin 폴더에 쓰면 ASP.NET은 업데이트를 감지하고 후속 새 페이지 요청에 .dll 파일의 새 버전을 사용합니다.
Bin 폴더 보안 컴파일된 어셈블리를 Bin 폴더에 배치하면 보안 위험이 발생합니다. 코드를 직접 작성하고 컴파일한 경우 코드의 기능을 알 수 있습니다. 그러나 Bin 폴더의 컴파일된 코드는 실행 코드처럼 처리해야 합니다. 컴파일된 코드를 테스트하고 해당 기능을 확실히 이해할 때까지 주의하십시오.
Bin 폴더에 컴파일된 코드를 배치할지 여부와 관련된 다음 보안 측면에 유의하십시오.
Bin 폴더의 어셈블리는 현재 애플리케이션으로 범위가 지정됩니다. 따라서 현재 웹 응용 프로그램 외부의 리소스에 액세스하거나 현재 웹 응용 프로그램 외부의 코드를 호출할 수 없습니다.
런타임 시 어셈블리의 액세스 수준은 로컬 컴퓨터에 지정된 신뢰 수준에 따라 결정됩니다. 자세한 내용은 ASP.NET 신뢰 수준 및 정책 파일을 참조하세요.
Visual Studio와 같은 디자이너를 사용하는 경우 Bin 폴더의 코드는 실행될 때와 다른 컨텍스트에서 실행됩니다. 예를 들어 코드가 완전 신뢰로 실행될 수 있습니다.
App_Code 폴더 App_Code 폴더에 소스 코드를 저장할 수 있으며, 이는 런타임 시 자동으로 컴파일됩니다. 웹 애플리케이션의 다른 코드는 결과 어셈블리에 액세스할 수 있습니다. 따라서 App_Code 폴더는 컴파일된 코드 대신 소스 코드를 저장할 수 있다는 점을 제외하면 Bin 폴더와 매우 유사하게 작동합니다. App_Code 폴더와 ASP.NET 웹 애플리케이션의 특별한 위치를 사용하면 사용자 지정 클래스와 기타 소스 코드 전용 파일을 만들고 별도로 컴파일할 필요 없이 웹 애플리케이션에서 사용할 수 있습니다.
App_Code 폴더에는 기존 클래스 파일(즉, 확장명이 .vb, .cs 등인 파일) 형식으로 작성된 소스 코드 파일이 포함될 수 있습니다. 그러나 특정 프로그래밍 언어로 작성된 것으로 명시적으로 표시되지 않는 파일이 포함될 수도 있습니다. 예로는 .wsdl(웹 서비스 설명 언어) 파일 및 xml 스키마(.xsd) 파일이 있습니다. ASP.NET은 이러한 파일을 어셈블리로 컴파일할 수 있습니다.
App_Code 폴더에는 필요한 만큼의 파일과 하위 폴더가 포함될 수 있습니다. 편리한 방식으로 소스 코드를 구성할 수 있으며 ASP.NET은 모든 코드를 단일 어셈블리로 컴파일하며 웹 응용 프로그램의 다른 코드에서 해당 어셈블리에 액세스할 수 있습니다.
알아채다
App_Code 폴더에서는 사용자 컨트롤이 허용되지 않습니다. 여기에는 단일 파일 사용자 컨트롤과 코드 숨김 모델을 사용하는 사용자 컨트롤이 포함됩니다. App_Code 디렉터리에 사용자 컨트롤을 배치하면 사용자 컨트롤 코드가 필요한 순서와 다르게 컴파일되므로 허용되지 않습니다. App_Code 폴더에 사용자 컨트롤을 배치할 필요는 없습니다. 이러한 컨트롤은 이미 애플리케이션의 모든 페이지에서 사용할 수 있습니다.
App_Code 폴더의 프로그래밍 언어 추론
App_Code 폴더는 프로그래밍 언어로 작성된 파일을 포함하는 것으로 명시적으로 표시되지 않습니다. 대신 ASP.NET은 App_Code 폴더에 포함된 파일을 기반으로 App_Code 폴더에 대해 호출해야 하는 컴파일러를 유추합니다. App_Code 폴더에 .vb 파일이 포함되어 있으면 ASP.NET은 Visual Basic 컴파일러를 사용하고, .cs 파일이 포함되어 있으면 ASP.NET은 C# 컴파일러를 사용합니다.
App_Code 폴더에 프로그래밍 언어를 명시적으로 나타내지 않는 파일(예: .wsdl 파일)만 포함된 경우 ASP.NET은 웹 응용 프로그램의 기본 컴파일러를 사용합니다. 이 컴파일러는 웹 응용 프로그램 또는 컴퓨터 구성 파일의 컴파일 요소에 있습니다. 물론입니다. .
App_Code 폴더에 여러 프로그래밍 언어 사용 App_Code 폴더에 있는 소스 코드는 단일 어셈블리로 컴파일되기 때문에 App_Code 폴더에 있는 모든 파일은 동일한 프로그래밍 언어로 작성되어야 합니다. 예를 들어 App_Code 폴더에는 Visual Basic과 C#으로 작성된 소스 코드가 포함될 수 없습니다.
그러나 App_Code 폴더의 하위 폴더를 별도의 컴파일 가능한 단위로 처리하도록 웹 애플리케이션을 구성할 수 있습니다. 이런 방식으로 각 폴더에는 다른 프로그래밍 언어로 작성된 소스 코드가 포함될 수 있습니다. Web.config 파일의 codeSubDirectories 요소에 컴파일 요소를 만든 다음 하위 폴더에 대한 참조를 추가하여 이 구성을 지정합니다. 다음 예에서는 VBCode 및 CSCode라는 하위 폴더를 구성하여 다른 어셈블리로 컴파일하는 방법을 보여줍니다.
코드 복사
<컴파일 디버그="false">
<디렉터리 추가이름="VBCode" />
<디렉터리 추가이름="CSCode" />
VBCode 및 CSCode 하위 폴더에 대한 참조에는 하위 폴더에 포함된 프로그래밍 언어에 대한 정보가 포함될 필요가 없습니다. App_Code 폴더 자체와 마찬가지로 ASP.NET은 하위 폴더의 파일을 기반으로 사용할 컴파일러를 유추합니다.
App_Code 폴더 보안
App_Code 폴더의 코드와 관련된 보안 문제는 기본적으로 Bin 폴더의 코드와 관련된 보안 문제와 동일합니다. 코드는 런타임에 어셈블리로 컴파일됩니다. Bin 폴더보다 좋은 점은 App_Code 폴더에 있는 파일의 소스코드를 읽을 수 있다는 점입니다. 그러나 코드를 완전히 이해하지 못하면 여전히 보안 위험이 있습니다. 따라서 App_Code 폴더의 소스 코드는 동일한 소스 코드에서 생성된 컴파일된 코드와 동일한 주의로 처리되어야 합니다.
출처: http://msdn2.microsoft.com/zh-cn/library/t990ks23(VS.80).aspx
-