2014-10-09 2 views
10

Clickonce 설치 프로그램을 사용하여 Outlook 추가 기능을 배포하려고합니다. 거의 작동하는 배치 파일이 있지만 Windows XP에 설치하려고하면 "xml signature is not valid"오류가 발생합니다. XP가 SHA256 인증서 example으로 실패한다는 것은 꽤 잘 알려져 있습니다. 또한 Visual Studio 인터페이스를 사용하여 게시 할 때 Visual Studio 2013 용 업데이트 3에서이 문제를 해결하는 것으로 알려져 있습니다. 커맨드 라인에서 signtool이나 mage를 사용하여 동일한 수정을 어떻게 수행 할 수 있을지 궁금합니다. 다음은 Windows XP를 제외한 모든 작동 나의 현재의 배치 파일입니다 :이 스크립트에 많은 비틀기를 시도Visual Studio 업데이트 3처럼 Sha256 Cert for .NET 4.0 ClickOnce에 서명하는 방법

:: Build and publish 
msbuild /target:clean,publish /property:MapFileExtensions=false /property:Configuration="Release" /property:ApplicationVersion="1.0.0.0" /property:InstallUrl="https://example.com" /property:UpdateEnabled="true" /property:UpdateMode="Foreground" /property:UpdateInterval="0" /property:UpdateIntervalUnits="days" /property:PublisherName="Example" /property:ProductName="Example Outlook Add-In" /property:FriendlyName="Example Outlook Add-In" /property:LoadBehavior="3" /property:BootstrapperEnabled="true" /property:IsWebBootstrapper="true" 

:: Sign the exe 
signtool sign /fd SHA1 /f "certificate.pfx" "publish\setup.exe" 

:: Sign the application manifest 
mage -sign "publish\Application Files\Example_1_0_0_0\Example.dll.manifest" -CertFile "certificate.pfx" 
mage -update "publish\Application Files\Example_1_0_0_0\Example.dll.manifest" -CertFile "certificate.pfx" -algorithm sha1RSA 

:: Sign the deployment manifests (there are 2 locations) 
mage -update "publish\Application Files\Example_1_0_0_0\Example.vsto" -appmanifest "publish\Application Files\Example_1_0_0_0\Example.dll.manifest" -CertFile "certificate.pfx" -algorithm sha1RSA 
mage -update "publish\Example.vsto" -appmanifest "publish\Application Files\Example_1_0_0_0\Example.dll.manifest" -CertFile "certificate.pfx" -algorithm sha1RSA 

는 내가 들어 왔 곳이다. Visual Studio "지금 게시"버튼을 사용하여 동일한 인증서로 게시하면 모든 것이 잘 작동하지만, 자동화를 위해 명령 줄에서 작업하고 싶습니다.

+0

음, 좋은 질문입니다. 아마도'procexp'를 실행하여 VS가 어떤 도구를 호출하고 있는지 (그리고 그들의 주장을) 정확히 볼 수있을 것입니다. – Cameron

답변

8

user2404450이 올바르게 썼기 때문에 VS 2013 업데이트에 포함 된 마법사를 사용하여 문제를 해결할 수 없습니다. Microsoft는 API를 업데이트했지만 mage.exe 도구는 업데이트하지 않았습니다. mage.exe를 호출하는 동안 "-algorithm sha1RSA"매개 변수를 추가하면 응용 프로그램 자원에 해시를 생성 할 때 사용할 다이제스트 알고리즘 만 지정합니다.

Microsoft.Build.Tasks.Deployment.ManifestUtilities.SecurityUtilities.SignFile(certThumbprint, timestampUrl, path, "v4.0"); 

당신은 4 매개 변수가 작동 얻을 VS 2013 업데이트 3을 설치해야합니다 :이 문제를 해결하려면

, 우리는 올바른 API를 호출하는 작은 도구를 작성했습니다, 예를 참조하십시오.

+0

위에서 설명한 SignFile (...) 메서드는 [여기] (http://stackoverflow.com/questions/30808242/where-is-microsoft-build-ko)에서 설명한대로 Microsoft.Build.Tasks.v12.0.dll에 있습니다. tasks-core-dll-located) – Wally

+0

이 응답은 오래되었습니다. 새로운 버전의 Mage가 새로운 API를 지원하는지 알고 있습니까? –

2

난 그냥 설치 업데이트 3 비주얼 스튜디오 2013가

을 MSBUILD 함께 할 방법을 알아 낸 것. 등록 정보> 서명 탭을 사용하여 저장소에 필요한 인증서를로드하고 각 인증서의 .csproj 파일에 <ManifestCertificateThumbprint>을 기록합니다. 그런 다음 명령 줄에서 다음과 같이 사용할 수 있습니다.

msbuild /target:publish /property:ManifestKeyFile="certificate.pfx" /property:ManifestCertificateThumbprint="CERTIFICATE THUMBPRINT" 
+1

그래, 원래 질문에 실제로 대답하지 않았어. 먼저 코드를 통해 매니페스트를 무시하고 Visual Studio를 다시 서명해야하기 때문에 질문에서 수행중인 작업을 수행해야합니다. – paulwhit

1

마법사를 사용하여 수행 할 수 없습니다. 이유는 마법사가 VS2013 업데이트 3에 추가 된 새 API를 사용하도록 업데이트되지 않았기 때문입니다.

그러나 새 API는 API in VS2013 Update 3이 공개되어 있으므로이 API를 사용하여 코드에 서명하는 간단한 콘솔 앱을 만들면됩니다. . 마지막 매개 변수 (targetFrameworkVersion)로 "3.5"또는 "4.0"을 전달하면 설정됩니다. 또한이 방법을 사용하려면 인증서가 인증서 저장소에 있어야합니다.