2013-02-08 3 views
11

ClickOnce를 통해 사용자에게 배포하려는 WPF 응용 프로그램이 있습니다. 우리는 네 가지 환경, 시스템 테스트, 사용자 테스트, 병렬 생산 및 생산이 있습니다. 각각은 서버 이름과 환경에 고유 한 다른 설정 파일을 필요로하기 때문에 모두 동일한 코드 기반을 사용할 수 없습니다. 대부분의 코드는 동일하지만 최종 패키지는 .config 파일이 다르기 때문에 약간 다릅니다.여러 환경에 Clickonce 배포

사용자 테스트에서 버전 05를 설치하고 테스트 한 다음 테스트 버전을 설치하면 다음 버전을 제공 할 때 업데이트 된 패키지를 넣을 수 있습니다. 사용자 테스트 웹 서버에서 배포 URL을 클릭하여 버전을 업데이트 할 수 있습니다. 그러나이 작업을 수행 할 때 "동일한 ID를 가진 응용 프로그램이 이미 있습니다"라는 메시지가 표시되고 버전 06을 설치하려면 제어판을 통해 제거해야합니다. 이것은 틀린 것처럼 보이고 clickonce의 요지는 아닙니다.

네 가지 환경에이 응용 프로그램을 빌드하고 배포하는 것이 좋습니다. 그러면 각 환경에서 서버에 새 버전을 설치하고 해당 환경에서 테스트하거나 사용하는 기능 만 있으면됩니다. 업데이트를 다운하여 제거 할 필요가 없습니다.

답변

2

먼저 두 URL의 동일한 배포 이름을 가진 응용 프로그램을 설치 제거 할 필요없이 먼저 다른 응용 프로그램을 설치할 수 없습니다. ClickOnce는 보안을 위해이 도구를 사용하여 누군가가 배포를 도용하지 않도록합니다.

둘째, 다른 빌드를 수행하려면 프로젝트 아래에 각 이름이있는 4 개의 폴더를 설정할 수 있습니다. 그런 다음 4 가지 빌드 구성을 설정하십시오 (동일한 것을 호출하십시오). 그런 다음 파일을 \ bin 폴더에 복사하는 빌드 후 명령을 설정하십시오. 폴더 이름을 설정하여 빌드 구성을 설정하면 해당 구성과 관련된 폴더 이름이 복사됩니다.

COPY/Y "$(TargetDir)myfile_$(ConfigurationName)\*.*" "$(TargetDir)" 

셋째, 당신은 빌드 완료 후 복사 명령으로 대체하는 경우에도, 그들은 배포에 포함 표시 할 수 있도록 프로젝트 자체에 파일을 포함해야합니다. 궁극적으로는 사용되지 않더라도 네 개의 디렉토리가 포함되어야합니다.

+0

: 속성 그룹이 (기본 ClickOnce를 설정을 정의하는 첫 번째 속성 그룹 후에 넣어)과 같이 원래 서버로? 그리고 서명하지 않았기 때문에 매니페스트 파일을 직접 편집 할 수 없습니까? – MickyD

0

나는 지난 2 일 동안 같은 일을 행하려고 노력해왔다. 내 현재의 방법은 다음을

msbuild /t:clean /p:Configuration=Release;PlatformTarget=x86 "C:\Product\Product.csproj 
del c:\Product\app.config 
ren C:\Product\systest.config C:\Product\app.config 
msbuild /t:publish /p:Configuration=Release;PlatformTarget=x86;UpdateEnabled=true;UpdateMode=Foreground;UpdatePeriodically=false;MinimumRequiredVersion=2013.2.1086.5496;ApplicationVersion=2013.2.1086.5496;UpdateRequired=true;ProductName="System Test Product";InstallUrl="http://systest.product.temp-uri.org/install/" 
ren C:\Product\bin\Release\app.publish systest.app.publish 

msbuild /t:clean /p:Configuration=Release;PlatformTarget=x86 "C:\Product\Product.csproj 
del c:\Product\app.config 
ren C:\Product\usertest.config C:\Product\app.config 
msbuild /t:publish /p:Configuration=Release;PlatformTarget=x86;UpdateEnabled=true;UpdateMode=Foreground;UpdatePeriodically=false;MinimumRequiredVersion=2013.2.1086.5496;ApplicationVersion=2013.2.1086.5496;UpdateRequired=true;ProductName="User Test Product";InstallUrl="http://usertest.product.temp-uri.org/install/" 
ren C:\Product\bin\Release\app.publish usertest.app.publish 

msbuild /t:clean /p:Configuration=Release;PlatformTarget=x86 "C:\Product\Product.csproj 
del c:\Product\app.config 
ren C:\Product\parallelprod.config C:\Product\app.config 
msbuild /t:publish /p:Configuration=Release;PlatformTarget=x86;UpdateEnabled=true;UpdateMode=Foreground;UpdatePeriodically=false;MinimumRequiredVersion=2013.2.1086.5496;ApplicationVersion=2013.2.1086.5496;UpdateRequired=true;ProductName="Parallel Prod Product";InstallUrl="http://parallelprod.product.temp-uri.org/install/" 
ren C:\Product\bin\Release\app.publish parallelprod.app.publish 

msbuild /t:clean /p:Configuration=Release;PlatformTarget=x86 "C:\Product\Product.csproj 
del c:\Product\app.config 
ren C:\Product\prod.config C:\Product\app.config 
msbuild /t:publish /p:Configuration=Release;PlatformTarget=x86;UpdateEnabled=true;UpdateMode=Foreground;UpdatePeriodically=false;MinimumRequiredVersion=2013.2.1086.5496;ApplicationVersion=2013.2.1086.5496;UpdateRequired=true;ProductName="Prod Product";InstallUrl="http://prod.product.temp-uri.org/install/" 
ren C:\Product\bin\Release\app.publish prod.app.publish 

난 당신이 설정 파일, 버전 또는 제품 이름을 변경하려면 응용 프로그램을 다시 컴파일해야 실현했다 명중 첫 번째 장애물. 정기적 인 빌드 후에 게시를 실행하면이 작업을 수행 할 수 없습니다. 이 시점에서 나는 이것이 각각의 설치 URL과 어플리케이션 매니페스트에 다른 제품 이름을 가지고 있기 때문에 이것이 효과가있을 것이라고 생각했지만, 여전히 당신이보고있는 것과 같은 메시지와 충돌합니다. 작동 시키면 다시 돌아와 수정 프로그램으로 업데이트 할 것입니다.

11

시간에 대한 해결책을 자신을 찾고있는 데, 내가 생각 해낸 마지막 하나는 실제로만큼 간단하다는 생각 난 :

  • Slow Cheetah 선택한 빌드에 따라 설정 파일을 변환하는
  • 특정 Click-Once 프로젝트 속성 (예 : ProductName 및 AssemblyName (test 및 prod 버전의 병렬 설치용), InstallUrl)이 포함 된 빌드 구성의 속성 그룹을 프로젝트 파일에 추가합니다.수동으로 느린 치타는이 문제를 처리 할 수있는 설정 파일을 복사 할 필요가 없습니다

게시 :은/대상을 실행할 때 msbuild를 통해 (ApplicationVersion, MinimumRequiredVersion 같은) 추가 속성을 지정

  • . 클릭 한 번 패키지는 해당 빌드 구성의 출력 폴더 (예 : bin/Debug 또는 가지고있는 항목)에 생성됩니다.

    가장 큰 이점은 Visual Studio 또는 msbuild를 사용하는 자동 빌드를 사용하는 경우 빌드가 동일하다는 것입니다 (완전히 선택적 인 몇 가지 추가 속성 제외). 빌드에 추가 환경을 추가하기 위해서해야 할 일은 새로운 빌드 구성과 느린 치타 변환 및 프로젝트 파일의 속성 그룹을 만드는 것입니다.

    전체 설정은 최소한 .NET 3.5 (이전 버전에 대해서는 말할 수 없음) 이상에서 작동합니다.

    아마도 도움이 될 것입니다. 언제든지 자세한 내용을 물어보십시오.

    PS : 나는 매니페스트는 여전히 참조됩니다 게시 할 때이 작동합니다 확실하지 않다

    <PropertyGroup Condition=" '$(Configuration)' == 'Demo' "> 
        <AssemblyName>Com.MyApplication.Main.Demo</AssemblyName> 
        <InstallUrl>http://demoserver/myapp/</InstallUrl> 
        <ProductName>My Application %28Demo%29</ProductName> 
        </PropertyGroup> 
        <PropertyGroup Condition=" '$(Configuration)' == 'Test' "> 
        <AssemblyName>Com.MyApplication.Main.Test</AssemblyName> 
        <InstallUrl>http://testserver/myapp/</InstallUrl> 
        <ProductName>My Application %28Test%29</ProductName> 
        </PropertyGroup> 
        <PropertyGroup Condition=" '$(Configuration)' == 'Prod' "> 
        <AssemblyName>Com.MyApplication.Main</AssemblyName> 
        <InstallUrl>http://prodserver/myapp/</InstallUrl> 
        <ProductName>My Application</ProductName> 
        </PropertyGroup> 
    
  • +3

    빌드 구성을 변경할 때마다 어떻게 Visual Studio에서 InstallUrl, UpdateURl 및 ProductName 속성을 작성하지 못하게합니까? – MyItchyChin

    +2

    @MyItchyChin 글쎄, 사실은 그렇지 않습니다. Visual Studio에서 프로젝트 속성 페이지를 열지 않는 한 속성 그룹을 변경하면 안됩니다. 또한 소스 제어 기능을 사용하면 문제가 발생하면 되돌릴 수있는 기회를 최소한 눈으로 확인할 수 있습니다. 여전히 마법사를 사용하는 것보다 훨씬 낫습니다 ... –