2017-01-23 8 views
7

우리는 ClickOnce을 사용하여 .Net 어플리케이션을 자동 업데이트합니다. 그러나 Click Once의 문제점은 프로젝트에서 어떤 변화가 일어나더라도 모든 어셈블리가 업데이트된다는 것입니다. 나는 을 수동으로 업데이트하려고 생각하고있다.을 이전의 ClickOnce 게시 폴더로 변경했고 MageUI.exe을 사용하여 업데이트 매니페스트를 변경했다. 또한 변경된 어셈블리를 버전으로 변경하여 ClickOnce 응용 프로그램이 설치된 사용자의 캐시 폴더를보고 변경된 어셈블리를 추적 할 수 있습니다. 나는이 을 받아 들일 수 있는지 알고 싶다 접근? 감사.ClickOnce에서 어셈블리 버전 유지 관리?

+0

나에게 묻는다면 일어날 수있는 문제가있는 것 같습니다. 한 클라이언트가 특정 "중간"업데이트를 놓친 경우 어떻게됩니까? 그는 새 버전을 얻을 수는 있지만 이전 버전에서 소개하지 않은 변경 사항 중 일부는 포함되지 않을 수 있습니다. – user1429080

+0

그래서 일단 클릭 한 번 설치하면 모든 dll의 버전 번호를 확인합니다. 따라서 업데이트 1에 버전 1.1.1.1의 dll이 있고 업데이트 2에 버전 1.1.1.2의 다른 dll이있는 경우 설치에 dll 1과 버전 1.1.1.1, dll 2에 버전 1.1.1.2가 있어야합니다. 업데이트 3에 도입 된 변경 사항이 있습니다. 실제로 최신 클릭 한번 릴리스는 마법사를 사용하여 증분 dll을 추가하도록 업데이트되며 모든 클라이언트는 동일한 릴리스를 얻습니다. 따라서 클라이언트가 이전 버전 인 경우 최신으로 업데이트되었습니다. –

+0

그러나 각 릴리스가 모든 이전 릴리스의 모든 내용과 현재 릴리스의 변경 사항을 가져야한다는 의미는 아닙니다. 의미, 각 릴리스는 어떤 시점에서 다음 릴리스가 모든 것을 포함해야 할 때까지 "더 살찌게"얻을 것인가?어쨌든, 내가 말할 수있는 한, * 이전 버전에서 현재 버전으로의 업그레이드를 지원하는 유일한 방법은 각 릴리스에 모든 것을 포함시키는 것입니다. 제한된 사용자가 있고 정기적으로 업데이트하도록 제어 할 수 있다면 어쩌면이 작업을 수행 할 수 있습니다. – user1429080

답변

4

저는 이것이 필요하지 않다고 생각합니다. ClickOnce를에 의해 제공되는 업데이트 대화 상자가 그렇게 말씀하지 않지만 다음과 같은 조건이 충족 될 때, ClickOnce를 파일을 다운로드하지 않습니다

  • 파일의 해시 파일의 타임 스탬프가 동일 동일
  • 입니다. 어셈블리에 대한
  • , 그것은해야 할 수 있습니다 그들을

대신 이전 버전의 파일을 복사합니다 강력한 이름.

강력한 이름을 사용하고 변경되지 않은 어셈블리를 다시 작성하지 않으면 ClickOnce는 원하는 작업을 정확하게 수행해야합니다.

참조 용으로 herehere을 참조하십시오.

Here 응용 프로그램을 업데이트 할 때 파일을 변경하지 않는 한에서 ClickOnce 응용 프로그램의 새 버전에 대한 모든 파일을 다운로드하지 않습니다

말 공식 소스입니다. 대신 현재 응용 프로그램의 응용 프로그램 매니페스트에 지정된 파일의 해시 서명과 새 버전의 매니페스트에있는 서명을 비교합니다. 파일의 서명이 다른 경우 ClickOnce는 새 버전을 다운로드합니다. 서명이 일치하면 파일이 한 버전에서 다른 버전으로 변경되지 않았습니다. 이 경우 ClickOnce는 기존 파일을 복사하여 응용 프로그램의 새 버전에서 사용합니다. 이 방법을 사용하면 한두 개의 파일 만 변경된 경우에도 ClickOnce가 전체 응용 프로그램을 다시 다운로드하지 않아도됩니다.

+0

예, 사실이지만 솔루션이 빌드되면 모든 어셈블리의 매니페스트가 변경됩니다. 코드 변경 사항이 있습니다. –

+0

네, 맞습니다. 프로젝트를 다른 솔루션에 배치하고 '기본'프로젝트에서 참조 된 어셈블리를 수동으로 업데이트해야합니다. 나는 이것이 한 가지 해결책으로 모든 것을 갖는 것보다 훨씬 덜 편리하다는 데 동의한다. 그러나 여전히 IMO는 해시 서명이 변경되었을 때 ClickOnce가 부분 업데이트를 수행하도록 시도하는 것보다 훨씬 낫습니다. – wkl

+0

우리의 응용 프로그램의 경우 부분적으로 dll을 업데이트하기 위해 프로젝트 설정에서 Full-trust 응용 프로그램 플래그를 설정해야합니다. – VMAtm