필수구성요소 Clickonce 게시
Visual Studio 의 프로젝트 속성 페이지의 게시 탭에 해당 프로젝트를 게시하고, 설치를 진행할 때, 응용 프로그램의 필수구성요소 Prerequisites를 지정할 수 있습니다.
응용 프로그램 실행에 필요한 구성요소를 실행전에 확인하여 설치를 진행하는 과정을 자동화하기 위한 것입니다.
예를 들면, 우리 응용 프로그램이 실행되기 위해서는 .NET Framework 4.6 이 필요하므로, 응용 프로그램이 실행되기 전에 .NET Framework 4.6 설치를 자동으로 진행하게 합니다.
이렇게 편리한 기능을 사용하기 위해서는 필수구성요소를 지정하고, 필수구성요소 다운로드 방법을 선택해야 합니다.
아래 설명하려는 내용은 내 응용 프로그램과 동일한 위치에서 필수 구성 요소 다운로드를 선택하고, 게시 Publish 를 진행하려고 할 때, 필수구성요소 설치파일을 구성하는 방벙을 Visual Studio 2008 에서 .NET Framework 3.5 SP1 을 필수구성요소로 지정할 때의 파일 구성을 예로 설명합니다.
필수구성요소 설치파일이 구성되어져 있지 않으면, 게시할 때 아래와 유사한 내용이 오류창에 나타납니다.
필수 구성 요소의 설치 위치를 ‘구성 요소 공급업체의 웹 사이트’로 설정하지 않아 디스크에서 ‘Microsoft.Net.Framework.3.5.SP1’ 항목의 ‘dotNetFx35setup.exe’ 파일을 찾을 수 없습니다.
필수구성요소 설치파일 구성의 예
Visual Studio 2008 에서 게시할 때, 필수구성요소로 .NET Framework 3.5 SP1을 지정하고, 내 응용 프로그램과 동일한 위치에서 필수 구성 요소 다운로드를 선택하여 게시합니다.
.NET Framework 3.5 SP1 설치를 위한 전체 패키지 파일
Microsoft .NET Framework 3.5 SP1 설치 파일 다운로드 페이지에서 전체 패키지 파일을 다운로드 합니다. (설치 지침 섹션을 확장하면 다운로드 링크가 있습니다.)
전체 패키지를 다운로드 받은 후 명령 프롬프트를 실행하고 파일이 있는 위치로 이동하여 설치파일을 압축해제하는 명령을 실행합니다.
아래와 같이 실행하면 압축을 해제할 디렉터리를 입력할 수 있는 창이 열립니다.
PS c:\>dotnetfx35.exe /X:
.NET Framework 3.5 SP1 언어팩 다운로드
그리고, Windows 언어가 한국어로 되어 있으면, 언어팩 설치 파일도 다운로드 받아야 합니다.
디렉터리 및 파일의 구성
지정된 디렉터리에 압축이 해제되면 아래와 같은 구조로 되어져 있습니다.
PS c:\TMP\DOTNETFX35SP1> tree /F
폴더 PATH의 목록입니다.
볼륨 일련 번호는 0000-0000입니다.
C:\TMP\DOTNETFX35SP1
│ tree.txt
│
└─wcu
└─dotNetFramework
│ dotNetFx35setup.exe
│
├─dotNetFX20
│ ASPNET.msp
│ ASPNET_64.msp
│ clr.msp
│ clr_64.msp
│ crt.msp
│ crt_64.msp
│ dw.msp
│ dw_64.msp
│ Netfx20a_x64.msi
│ Netfx20a_x86.msi
│ NetFX_CA.msp
│ NetFX_Core.msp
│ NetFX_Core_64.msp
│ NetFX_Other.msp
│ NetFX_Other_64.msp
│ prexp.msp
│ winforms.msp
│ winforms_64.msp
│
├─dotNetFX30
│ │ Netfx30a_x64.msi
│ │ Netfx30a_x86.msi
│ │ RGB9RAST_x64.msi
│ │ RGB9RAST_x86.msi
│ │ WCF.msp
│ │ WCF_64.msp
│ │ WCS.msp
│ │ WCS_64.msp
│ │ WF.msp
│ │ WF_32.msp
│ │ WF_64.msp
│ │ WIC_x64_enu.exe
│ │ WIC_x86_enu.exe
│ │ WPF1.msp
│ │ WPF1_64.msp
│ │ WPF2.msp
│ │ WPF2_32.msp
│ │ WPF2_64.msp
│ │ WPF_Other.msp
│ │ WPF_Other_32.msp
│ │ WPF_Other_64.msp
│ │ XPS.msp
│ │ XPSEPSC-amd64-en-US.exe
│ │ XPSEPSC-x86-en-US.exe
│ │
│ ├─x64
│ │ msxml6.msi
│ │
│ └─x86
│ msxml6.msi
│
├─dotNetFX35
│ ├─ia64
│ │ netfx35_ia64.exe
│ │
│ ├─x64
│ │ netfx35_x64.exe
│ │
│ └─x86
│ netfx35_x86.exe
│
├─dotNetMSP
│ │ NetFx_20_SP1_ENU_License.rtf
│ │ NetFx_30_SP1_ENU_License.rtf
│ │
│ ├─ia64
│ │ NetFX2.0-KB948609-v6001-ia64.msu
│ │ NetFX3.0-KB948610-v6001-ia64.msu
│ │
│ ├─x64
│ │ NetFX2.0-KB936704-v6000-x64_RTM_en.msu
│ │ NetFX2.0-KB948609-v6001-x64.msu
│ │ NetFX3.0-KB936705-v6000-x64_RTM_en.msu
│ │ NetFX3.0-KB948610-v6001-x64.msu
│ │
│ └─x86
│ NetFX2.0-KB936704-v6000-x86_RTM_en.msu
│ NetFX2.0-KB948609-v6001-x86.msu
│ NetFX3.0-KB936705-v6000-x86_RTM_en.msu
│ NetFX3.0-KB948610-v6001-x86.msu
│
└─Tools
clwireg.exe
clwireg_ia64.exe
clwireg_x64.exe
Visual Studio 2008 에서 필수구성요소를 탐색하는 디렉터리는 x86 OS는 C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages
x64 OS는 C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages
입니다.
위 디렉터리에 있는 DotNetFX35SP1
디렉터리가 .NET Framework 3.5 SP1 설치 파일이 존재해야 하는 디렉터리입니다.
아직 파일을 추가하지 않았으므로 아래와 같은 내용일 것입니다.
PS C:\PROGRAM FILES (X86)\MICROSOFT SDKS\WINDOWS\V6.0A\BOOTSTRAPPER\PACKAGES\DOTNETFX35SP1> tree /F
Folder PATH listing
Volume serial number is 0000-0000
C:\PROGRAM FILES (X86)\MICROSOFT SDKS\WINDOWS\V6.0A\BOOTSTRAPPER\PACKAGES\DOTNETFX35SP1
│ product.xml
│
└─ko
eula.rtf
package.xml
이 디렉터리에 설치파일 압축해제한 내용을 복사합니다.
언어팩은 ko 디렉터리 하위에 dotNetFX35
디렉터리를 만들고, dotNetFX35
디렉터리 하위에 x86
, x64
디렉터리를 만듭니다.
그 후 설치파일의 아키텍쳐와 동일한 디렉터리에 파일을 복사합니다.
설치 파일들을 복사하면 아래와 같이 구성됩니다.
PS C:\PROGRAM FILES (X86)\MICROSOFT SDKS\WINDOWS\V8.0A\BOOTSTRAPPER\PACKAGES\DOTNETFX35SP1> tree /F
Folder PATH listing
Volume serial number is 0000-0000
C:\PROGRAM FILES (X86)\MICROSOFT SDKS\WINDOWS\V8.0A\BOOTSTRAPPER\PACKAGES\DOTNETFX35SP1
│ dotNetFx35setup.exe
│ product.xml
│
├─dotNetFX20
│ ASPNET.msp
│ ASPNET_64.msp
│ clr.msp
│ clr_64.msp
│ crt.msp
│ crt_64.msp
│ dw.msp
│ dw_64.msp
│ Netfx20a_x64.msi
│ Netfx20a_x86.msi
│ NetFX_CA.msp
│ NetFX_Core.msp
│ NetFX_Core_64.msp
│ NetFX_Other.msp
│ NetFX_Other_64.msp
│ prexp.msp
│ winforms.msp
│ winforms_64.msp
│
├─dotNetFX30
│ │ Netfx30a_x64.msi
│ │ Netfx30a_x86.msi
│ │ RGB9RAST_x64.msi
│ │ RGB9RAST_x86.msi
│ │ WCF.msp
│ │ WCF_64.msp
│ │ WCS.msp
│ │ WCS_64.msp
│ │ WF.msp
│ │ WF_32.msp
│ │ WF_64.msp
│ │ WIC_x64_enu.exe
│ │ WIC_x86_enu.exe
│ │ WPF1.msp
│ │ WPF1_64.msp
│ │ WPF2.msp
│ │ WPF2_32.msp
│ │ WPF2_64.msp
│ │ WPF_Other.msp
│ │ WPF_Other_32.msp
│ │ WPF_Other_64.msp
│ │ XPS.msp
│ │ XPSEPSC-amd64-en-US.exe
│ │ XPSEPSC-x86-en-US.exe
│ │
│ ├─x64
│ │ msxml6.msi
│ │
│ └─x86
│ msxml6.msi
│
├─dotNetFX35
│ ├─ia64
│ │ netfx35_ia64.exe
│ │
│ ├─x64
│ │ netfx35_x64.exe
│ │
│ └─x86
│ netfx35_x86.exe
│
├─dotNetMSP
│ │ NetFx_20_SP1_ENU_License.rtf
│ │ NetFx_30_SP1_ENU_License.rtf
│ │
│ ├─ia64
│ │ NetFX2.0-KB948609-v6001-ia64.msu
│ │ NetFX3.0-KB948610-v6001-ia64.msu
│ │
│ ├─x64
│ │ NetFX2.0-KB936704-v6000-x64_RTM_en.msu
│ │ NetFX2.0-KB948609-v6001-x64.msu
│ │ NetFX3.0-KB936705-v6000-x64_RTM_en.msu
│ │ NetFX3.0-KB948610-v6001-x64.msu
│ │
│ └─x86
│ NetFX2.0-KB936704-v6000-x86_RTM_en.msu
│ NetFX2.0-KB948609-v6001-x86.msu
│ NetFX3.0-KB936705-v6000-x86_RTM_en.msu
│ NetFX3.0-KB948610-v6001-x86.msu
│
├─ko
│ │ eula.rtf
│ │ package.xml
│ │
│ └─dotNetFX35
│ ├─x64
│ │ dotnetfx35langpack_x64ko.exe
│ │
│ └─x86
│ dotnetfx35langpack_x86ko.exe
│
└─Tools
clwireg.exe
clwireg_ia64.exe
clwireg_x64.exe
게시
이제 응용 프로그램을 게시 Publish 하면, 게시파일 생성 위치에 설치파일 관련 디렉터리가 만들어지고, 필수구성요소 설치 파일이 복사됩니다.
배포 페이지에서 설치
버튼을 클릭하면, 필수구성요소 확인 후 설치가 필요한 경우 설치파일을 다운로드 받아 설치가 진행됩니다.
예외
설치 파일에 따라서는 이미 설치된 구성요소 확인이 불가능하고, 업데이트 또는 업그레이드를 지원하지 않는 경우가 있어 이미 설치되어 있는 구성요소를 프로그램 추가/제거
에서 제거한 후 설치를 진행해야하는 경우도 있습니다.
Crystal Report Basic Runtime for Visual Studio 2008 구성요소가 이와 같은 경우에 속합니다.
정리
필수구성요소 설치 파일은 Packages 디렉터리에 구성요소별 디렉터리가 있고, Product.xml 파일로 구성이 정리되어 있는 것도 있고, 새로운 구성을 해야하는 경우도 있습니다.
새로운 구성요소를 추가하려면 MSDN: Product and Package Schema Reference 페이지를 확인하고, 구성을 해야 하고, 이미 정의된 필수구성요소는 필요한 파일을 구해서 지정된 위치에 복사하고, Visual Studio를 재시작하면 대부분 문제없이 게시할 수 있습니다.
추가
필수구성요소 설치 파일이 웹서버에서 처리될 수 있도록 MIME TYPE을 추가해야 할 수도 있습니다.
- .msp ==> application/microsoftpatch
- .msu ==> application/microsoftupdate
이 사이트는 광고를 포함하고 있습니다.
광고로 발생한 수익금은 서버 유지 관리에 사용되고 있습니다.This site contains advertisements.
Revenue generated by the ad servers are being used for maintenance.