2011-03-17 68 views
72

ClickOnce 응용 프로그램을 배포하려고하지만 클라이언트에서 설치가 실패합니다. 다음은 오류 로그의 :ClickOnce 응용 프로그램 배포 중 오류 - 매니페스트의 참조가 다운로드 한 어셈블리의 ID와 일치하지 않습니다.

PLATFORM VERSION INFO 
Windows    : 6.1.7601.65536 (Win32NT) 
Common Language Runtime  : 4.0.30319.1 
System.Deployment.dll  : 4.0.30319.1 (RTMRel.030319-0100) 
clr.dll    : 4.0.30319.1 (RTMRel.030319-0100) 
dfdll.dll   : 4.0.30319.1 (RTMRel.030319-0100) 
dfshim.dll   : 4.0.31106.0 (Main.031106-0000) 

SOURCES 
Deployment url   : http://MyProduct.com/download/workstation/MyProduct%20Front%20Desk.application 
        Server  : Microsoft-IIS/7.5 
        X-Powered-By : ASP.NET 
Deployment Provider url  : http://MyProduct.com/Download/Workstation/MyProduct%20Front%20Desk.application 
        Server  : Microsoft-IIS/7.5 
        X-Powered-By : ASP.NET 
Application url   : http://MyProduct.com/Download/Workstation/Application%20Files/MyProduct%20Front%20Desk_1_0_0_7/MyProduct%20Front%20Desk.exe.manifest 
        Server  : Microsoft-IIS/7.5 
        X-Powered-By : ASP.NET 

IDENTITIES 
Deployment Identity  : MyProduct Front Desk.application, Version=1.0.0.7, Culture=neutral, PublicKeyToken=df343a0868ab2d74, processorArchitecture=msil 
Application Identity  : MyProduct Front Desk.exe, Version=1.0.0.7, Culture=neutral, PublicKeyToken=df343a0868ab2d74, processorArchitecture=msil, type=win32 

APPLICATION SUMMARY 
* Installable application. 

ERROR SUMMARY 
Below is a summary of the errors, details of these errors are listed later in the log. 
* Activation of http://MyProduct.com/download/workstation/MyProduct%20Front%20Desk.application resulted in exception. Following failure messages were detected: 
    + Reference in the manifest does not match the identity of the downloaded assembly MyProductSiteServer.exe. 

COMPONENT STORE TRANSACTION FAILURE SUMMARY 
No transaction error was detected. 

WARNINGS 
There were no warnings during this operation. 

OPERATION PROGRESS STATUS 
* [03/17/11 11:51:04] : Activation of http://MyProduct.com/download/workstation/MyProduct%20Front%20Desk.application has started. 
* [03/17/11 11:51:04] : Processing of deployment manifest has successfully completed. 
* [03/17/11 11:51:04] : Installation of the application has started. 
* [03/17/11 11:51:05] : Processing of application manifest has successfully completed. 
* [03/17/11 11:51:06] : Found compatible runtime version 4.0.30319. 
* [03/17/11 11:51:06] : Request of trust and detection of platform is complete. 

ERROR DETAILS 
Following errors were detected during this operation. 
* [03/17/11 11:51:30] System.Deployment.Application.InvalidDeploymentException (RefDefValidation) 
    - Reference in the manifest does not match the identity of the downloaded assembly MyProductSiteServer.exe. 
    - Source: System.Deployment 
    - Stack trace: 
     at System.Deployment.Application.DownloadManager.ProcessDownloadedFile(Object sender, DownloadEventArgs e) 
     at System.Deployment.Application.FileDownloader.DownloadModifiedEventHandler.Invoke(Object sender, DownloadEventArgs e) 
     at System.Deployment.Application.SystemNetDownloader.DownloadSingleFile(DownloadQueueItem next) 
     at System.Deployment.Application.SystemNetDownloader.DownloadAllFiles() 
     at System.Deployment.Application.FileDownloader.Download(SubscriptionState subState) 
     at System.Deployment.Application.DownloadManager.DownloadDependencies(SubscriptionState subState, AssemblyManifest deployManifest, AssemblyManifest appManifest, Uri sourceUriBase, String targetDirectory, String group, IDownloadNotification notification, DownloadOptions options) 
     at System.Deployment.Application.ApplicationActivator.DownloadApplication(SubscriptionState subState, ActivationDescription actDesc, Int64 transactionId, TempDirectory& downloadTemp) 
     at System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState& subState, ActivationDescription actDesc) 
     at System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl) 
     at System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state) 

COMPONENT STORE TRANSACTION DETAILS 
No transaction information is available. 

내가 배포하는 데 필요한 주요 EXE는 MyProductSiteServer.exe에 종속 MyProductFrontDesk.exe이다는 - 그것은 오류가 발생되는 위치 것으로 보인다 "매니페스트의 참조가 일치하지 않습니다 다운로드 한 어셈블리 MyProductSiteServer.exe의 ID. "

수정해야 할 매니페스트는 무엇입니까? 그리고 어떻게?

+0

MySiteServer.exe 프로젝트가 MyProductFrontDesk.exe와 동일한 Visual Studio 솔루션에 있습니까? 그렇다면 빌드 구성에서 두 어셈블리를 모두 선택하여 빌드 할 수 있습니까? – Jay

+0

@ 제이 - 예, 동일한 솔루션에서 둘 모두 빌드하도록 선택되었습니다. –

답변

83

an issue with Visual Studio 2008 which is solved by not embedding the default manifest이 있었다 ->응용 프로그램 탭 - ->자원 -> 체크 박스 아이콘이 기사에 대한 코멘트 중 하나가 문제가 계속 프로젝트 속성에서 Visual Studio 2010에서 Visual Studio 2010을

에 존재 제안 매니페스트의 경우 "기본 설정으로 매니페스트 포함"설정이 문제를 일으켰습니다. 이를 "매니페스트없이 응용 프로그램 만들기"로 설정하면 문제가 해결됩니다.

+1

YAHOOO! 고마워,이게 날 미치게 한거야! –

+0

[주석 ​​488301] (http://geekswithblogs.net/rakker/archive/2007/12/06/117449.aspx#488301) 특히 유용 : 사용자 정의 매니페스트의 ''요소를 조정할 수 있습니다 ClickOnce를 깨지 않고''과 같은 것을 지정할 수있게 해주는 커스텀'.manifest' 파일에서 (컴파일러가 정확한 어셈블리 ID를 방출 할 수 있도록 생략되었습니다.) – binki

+3

내 시나리오는 콘솔 앱인 두 번째 앱이 필요한 GUI 앱이었습니다. 나처럼 기본 설정을 변경하지 않으려면 두 번째 응용 프로그램을 수동으로 게시하여 Properties 폴더에 표시된 app.manifest를 만든 다음 첫 번째 응용 프로그램을 다시 게시하여 매니페스트 포함의 기본 설정을 변경하지 않아도됩니다. – Aybe

9

Visual Studio 2010에도 문제가 있음을 확인했습니다. 프로젝트 속성 - 응용 프로그램 - 리소스에서 "매니페스트없이 응용 프로그램 만들기"를 선택하면 문제가 해결되었습니다.

+6

오류 메시지가 불만을 제기하는 프로젝트에서이 속성을 변경해야한다는 점에 유의하십시오. 프로젝트에 실제로 참조하려고했던 프로젝트가 아니라 실제로 시도한 프로젝트가 프로젝트에서 참조한 프로젝트입니다. 게시하십시오. – deadlydog

33

동일한 문제가 발생했으나 해결책이 매우 다릅니다.

내 ClickOnce 응용 프로그램이 내 솔루션에서 다른 EXE 파일 프로젝트를 참조 했으므로 클라이언트가 해당 파일을 다운로드하고 다른 EXE 파일이있을 때 매니페스트가없는 경우가있었습니다.

다른 실행 파일에 대한 종속성을 제거하면 내 문제가 해결됩니다.

+2

또한 두 개의 EXE가 있습니다. 종속성 제거하면 refferenced EXE 빌드에서 제외됩니다. 그것을 포함 할 수있는 방법이 있습니까? –

+9

이것은 나를위한 해결책이었습니다. 내 주요 EXE가 참조했던 프로젝트 중 하나가 그 자체가 'Windows 응용 프로그램'이었습니다. 이 프로젝트를 '클래스 라이브러리'로 변경하고 다시 게시하면 모든 것이 작동했습니다. –

+0

VS2012에서 @ChrisRay의 제안을 사용했고 프로그램을 아무 문제없이 설치했습니다. 감사! – Rolan

3

나는 정확히 같은 문제가있었습니다. 주 프로젝트에서 필요했던 종속성을 제거 할 수 없었습니다. 두 번째 프로젝트는 콘솔 프로젝트였습니다.

클래스 라이브러리으로 변경 한 다음 모두 작동했습니다.

+0

이 댓글은 내 문제를 해결했습니다. 고맙습니다! – casaout

5

NuGet 패키지의 두 가지 버전이 프로젝트의 다른 DLL 파일에서 참조되는 경우에도 이러한 현상이 발생할 수 있습니다. 제 경우에는 Catel이라는 프레임 워크를 사용하고 있었고 다른 DLL 파일에서 참조 된 최신 버전이 다른 것 (감독) 이었지만 ClickOnce가이 오류를 일으켰습니다. 동일한 버전을 참조하면 문제가 해결되었습니다.

+0

이것은 제 문제이기도합니다. 고마워요! –

4

동일한 문제가 있었지만 해결책은 '플랫폼 대상'을 'x86'(프로젝트 속성 -> 빌드 탭)으로 변경하는 것이 었습니다. 모든 CPU로 설정되었습니다. 설정을 변경하고 다시 게시하면 ClickOnce 설치 관리자가 완료 할 수있었습니다.

+0

매우 비슷한 문제 : "32 비트 선호"가 활성화되었습니다. 전원을 끄면 문제가 해결되었습니다. –

1

또한 ClickOnce .exe를 호출 할 때 .exe 호출 .exe를 호출합니다.

나는 내가 ClickOnce를 Windows가 두 번째 Windows가 다시 세 번째의 Windows Forms 응용 프로그램을 참조 Forms 응용 프로그램을 참조 Forms 응용 프로그램이 2010 년

스튜디오   비주얼  에 VB.NET을 사용하여이 문제를 가지고 있었다.(이 두 번째 및 세 번째 응용 프로그램은 DLL 파일이 아닌 EXE 파일이므로 쉽게 전달할 수 있습니다.

둘째 줄은 두 번째와 세 번째 응용 프로그램의 매니페스트 내용 당은 :

Walkthrough: Manually Deploying a ClickOnce Application

그것은 완벽하게 작동합니다.

26

다른 프로젝트에 대한 참조를 추가 할 때도 동일한 문제가있었습니다.

해결 방법은 이언이 here으로 설명한대로 ClickOnce 보안 설정을 참조 된 모든 프로젝트에서 활성화하는 것이 었습니다.

같은 해결책으로 다른 프로젝트를 참조 할 때이를 수정하는 적절한 방법이라고 생각합니다. 편집

: 여기 링크 (강조 광산)에서 관련 블록 : 나를 위해

이 해결 한 방법은 "노출 솔루션 아래에있는 모든 프로젝트 수 있도록했다 보안 탭 "의"프로젝트 속성 "에"ClickOnce 보안 설정 사용 "옵션이 표시되어 있습니다."이것은 신뢰 인증 응용 프로그램입니다. "이 선택되었습니다. 이는 매니페스트를 올바르게 작성하는 것과 관련이 있으며 솔루션 내에서 필요한 모든 프로젝트에 이러한 옵션이 설정되어 있지 않으면 애플리케이션이 설치되지 않습니다.

편집 : 링크 된 포럼 게시물이 지금 만료하지만 아카이브 here에 사용할 수있다.

+7

** 승인 된 답변 **으로 표시되어야합니다. –

+0

많은 솔루션을 시도한 후에이 솔루션 만 저에게 적합합니다. 그래서 나는 이것이 받아 들여진 대답이되어야한다고 생각합니다 ... – Tareq

+0

' LocalIntranet을 사용하여'.cproj' 파일을 수정하면 똑같이 할 수 있습니다. – VMAtm

2

프로젝트를 디버그로 설정하여 배포 할 때도 동일한 오류가 발생했습니다. 릴리스로 다시 변경되면 오류가 없습니다.

1

나는 똑같은 문제가있어서 여기에 제시된 해결책을 모두 시도했지만 모두 작동하지 않았다.

업데이트 위치를 변경하여 수정했습니다. 프로젝트 속성에서 -> ->을 게시하십시오. 업데이트 위치를 게시 된 폴더로 변경하십시오.

0

또 다른 해결 방법은 잘못된 앱 매니페스트와의 종속성 exe를 변경할 수 없다는 것입니다 (예 : NuGet 패키지에서 가져옴). 바이너리는 더미 확장자를 가진 내용으로 포함될 수 있으므로 ClickOnce는 매니페스트 유효성 검사를 시도하지 않고 응용 프로그램 시작 중에 이름을 바꿉니다.

csproj :

<Content Include="..\packages\<package>\lib\<app>.exe"> 
    <Link><app>.exe.bin</Link> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    <ItemGroup> 
    <PublishFile Include="<app>"> 
     <Visible>False</Visible> 
     <Group> 
     </Group> 
     <TargetPath> 
     </TargetPath> 
     <PublishState>Exclude</PublishState> 
     <IncludeHash>True</IncludeHash> 
     <FileType>Assembly</FileType> 
    </PublishFile> 
    </ItemGroup> 

App.xaml.CS :

public partial class App : Application 
{ 
    private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     var appDir = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); 
     if (!File.Exists($"{appDir}\\<app>.exe")) 
     { 
      File.Copy($"{appDir}\\<app>.exe.bin", $"{appDir}\\<app>.exe"); 
     } 
    } 
} 
0

나는 윈도우   7에서 Visual   스튜디오   2012을 사용하여 두 개의 프로젝트로 구성된 솔루션을 게시해야하고 있습니다.

Eduardo가 지적했듯이 두 프로젝트를 ClickOnce로 표시하고 완전 신뢰 응용 프로그램을 사용하도록 설정하면 문제가 해결됩니다.

0

내가 해결할 수 있었던 다른 문제가있어서 게시하고 싶었습니다. 내 문제는 TFS에서 3 개의 분기를 실행하고 있었다는 것입니다. 내 지사 중 하나에서 Telerik 컨트롤을 업그레이드했지만 다른 것은 제어하지 못했습니다. Telerik 컨트롤을 3 개의 모든 지점에서 업그레이드하고 다시 게시하면이 오류가 사라졌습니다.

당시 VS2015를 실행 중이 었습니다.

0

재미 있습니다. 방금 응용 프로그램을 재배포하고 문제를 해결했습니다. 네트워크로 인해 파일이 손상되었을 수 있습니다.

+0

이 woule이 (가) 더 많은 의견을 남깁니다. 문제의 해결책이 아닙니다. –

관련 문제