ClickOnce 응용 프로그램 배포 오류-매니페스트의 참조가 다운로드 한 어셈블리의 ID와 일치하지 않습니다.


105

ClickOnce 응용 프로그램을 배포하려고하는데 클라이언트에서 설치가 실패합니다. 다음은 오류 로그입니다.

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 MyProductFrontDesk.exe는에 종속되어 MyProductSiteServer.exe있으며 오류가 발생하는 위치 인으로 나타납니다. "매니페스트의 참조가 다운로드 된 어셈블리 MyProductSiteServer.exe의 ID와 일치하지 않습니다."

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


MySiteServer.exe 프로젝트가 MyProductFrontDesk.exe와 동일한 Visual Studio 솔루션에 있습니까? 그렇다면 빌드 구성에 두 어셈블리가 모두 선택되어 있습니까?
제이

@Jay-예, 동일한 솔루션에서 둘 다 빌드하도록 선택했습니다.
Shaul Behr 2011 년

답변:


111

있었다 기본 매니페스트를 내장하지 않음으로써 해결된다 비주얼 스튜디오 2008에 문제가 그 기사에 대한 코멘트 중 하나 문제가 계속 비주얼 스튜디오 2010에 존재하는 제안은 -.

프로젝트 속성-> 응용 프로그램 탭-> 리소스 -> 확인란 아이콘 및 매니페스트 에서 "기본 설정으로 매니페스트 포함"설정으로 인해 문제가 발생했습니다. "매니페스트없이 응용 프로그램 만들기"로 설정하면 문제가 해결됩니다.


주석 488301이 특히 유용하다는 것을 알았 <assemblyIdentity/>습니다. 사용자 지정 매니페스트 의 요소를 사용자 지정 .manifest파일 에서 조정 (또는 컴파일러가 올바른 어셈블리 ID를 내도록 생략) 할 수 있으므로 <requestedExecutionLevel/>ClickOnce를 중단하지 않고 같은 항목을 지정할 수 있습니다.
binki

4
내 시나리오는 콘솔 앱인 두 번째 앱이 필요한 GUI 앱이었습니다. 나처럼 기본 설정을 변경하지 않으려면 두 번째 응용 프로그램을 수동으로 게시하여 속성 폴더에 나타나는 app.manifest를 만든 다음 매니페스트 포함의 기본 설정을 변경하지 않고도 첫 번째 응용 프로그램을 다시 게시하면 작동합니다.
aybe 2014 년

7
VS 2013에서도 동일한 문제가 발생했습니다.이 솔루션이 작동했습니다.
EagleBeak 2014

2
@EagleBeak VS2013에서이 메뉴는 어디에 있습니까? 나는 "매니페스트없이 응용 프로그램을 만드는"에 대해 아무 것도 볼 해달라고
Nefariis

3
2016 년 6 월 현재 정답은 ClickOnce 보안 설정 을 구성 하는 것입니다 (Mauro가 게시 한 답변 참조).
Pierre Arnaud

57

다른 프로젝트에 대한 참조를 추가 할 때 동일한 문제가 발생했습니다.

이 문제를 해결하는 방법 은 Ian이 여기에서 설명한대로 모든 참조 프로젝트에서 ClickOnce 보안 설정 을 활성화하는 것입니다 (강조 표시).

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

동일한 솔루션으로 다른 프로젝트를 참조 할 때 이것이 올바른 방법이라고 생각합니다.

링크 된 포럼 게시물은 지금 만료되었지만 여기 에서 아카이브에서 사용할 수 있습니다 .


1
너무 많은 솔루션을 시도한 후에는이 솔루션 만 효과적입니다. 나는 또한 ...이 허용 대답해야한다고 생각합니다 그래서
타 레크

수정하여 동일한 작업을 수행 할 수 있습니다. .cproj 파일을<PropertyGroup><TargetZone>LocalIntranet</TargetZone></PropertyGroup>
VMAtm

내가 장난하는 동안 나는 그 두 가지 설정을 비활성화했다 https://github.com/Squirrel. 내 (비 프로덕션) ClickOnce 배포가 작동을 멈췄을 때 나는 이것에 대해 모두 잊어 버렸습니다.
Walter Stabosz

35

동일한 문제가 발생했지만 내 솔루션은 매우 달랐습니다.

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

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


2
또한 두 개의 EXE가 있습니다. 종속성을 제거하면 참조 된 EXE가 빌드에서 제외됩니다. 그것을 포함하는 방법이 있습니까?
Uri Abramson 2013

10
이것이 나를위한 해결책이었습니다. 내 주요 EXE가 참조하는 프로젝트 중 하나는 그 자체가 'Windows 응용 프로그램'이었습니다. 그 프로젝트를 'Class Library'로 변경하고 다시 게시했을 때 모든 것이 작동했습니다.
Chris Ray

VS2012에서 @ChrisRay의 제안을 사용했으며 프로그램은 어려움없이 설치되었습니다. 감사!
Rolan 2015

1
사용자 @Aybe가 다른 답변의 의견에서 언급했듯이 두 번째 응용 프로그램을 더미 게시하면 자체 매니페스트를 얻은 다음 첫 번째 응용 프로그램을 게시 할 수 있으며 두 프로그램이 함께 작동합니다. (내 경우에는 내가, 다른 호출 한 두 개의 프로그램이 있습니다.)
데이브 Cousineau

나를위한 해결책은 실제로 둘 다였습니다 (this와 @stuartd). 매니페스트가없는 참조 어셈블리로 EXE가 있습니다. 하지만이 참조를 사용해야하므로이 참조를 "제거"할 수 없습니다. 그래서 저는이 EXE 의존성 프로젝트로 가서 stuartd의 제안을 적용해야했습니다. 그러면 모든 것이 잘 작동합니다.
KFL

11

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


8
오류 메시지가 불평하는 프로젝트에서이 속성을 변경해야했습니다.이 속성은 실제로 게시하려는 프로젝트가 아니라 실제로 게시하려는 프로젝트에서 참조하는 프로젝트였습니다. .
deadlydog 2013

6

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


4

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


1
매우 유사한 문제 : "Prefer 32-bit"를 활성화했습니다. 끄면 문제가 해결되었습니다.
Roman Starkov

4

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


4

나는 똑같은 문제가 있었다. 메인 프로젝트에서 필요했기 때문에 종속성을 제거 할 수 없습니다. 두 번째 프로젝트는 콘솔 프로젝트였습니다.

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


이 의견은 내 문제를 해결했습니다. 감사합니다!
casaout 2015 년

2

다른 해결 방법은 잘못된 앱 매니페스트가있는 종속성 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");
        }
    }
}

1

나는 동일한 문제가 있었고 이전에 제안 된 모든 솔루션을 여기서 시도했지만 모두 작동하지 않았습니다.

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


1

ClickOnce .exe가 .exe를 호출하여 .exe를 호출하는 것도 해결되었습니다.

Visual Studio 2010에서 VB.NET을 사용하여이 문제가 발생했습니다.

차례로 세 번째 Windows Forms 응용 프로그램을 참조하는 두 번째 Windows Forms 응용 프로그램을 참조하는 ClickOnce Windows Forms 응용 프로그램이 있습니다. (이 두 번째 및 세 번째 응용 프로그램은 단순성을 위해 DLL 파일이 아닌 EXE 파일입니다. 똑같이 독립 실행 형으로 실행되거나 속성이 전달 된 상태로 호출 될 수 있기 때문입니다.)

두 번째 및 세 번째 응용 프로그램의 매니페스트 내용을 모두 주석 처리해야했습니다 .

연습 : ClickOnce 응용 프로그램 수동 배포

완벽하게 작동합니다.


1

다른 프로그램을 참조하는 하나의 주 프로그램이있는 경우 주 프로그램의 프로그램에서 "매니페스트없이 응용 프로그램 만들기"트릭을 수행해야합니다.

프로젝트-> 속성-> 애플리케이션 탭-> 리소스-> 매니페스트-> "매니페스트없이 애플리케이션 만들기"드롭 다운

그런 다음 참조 된 프로그램의 프로젝트 속성으로 전환하고 프로세스를 반복합니다.


0

Windows 7에서 Visual Studio 2012를 사용하고 있으며 두 개의 프로젝트로 구성된 솔루션을 게시해야합니다.

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


0

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

당시 저는 VS2015를 실행하고있었습니다.


0

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


0

mage.exe내 매니페스트를 생성 하는 데 사용 합니다. 이 .csproj문제를 해결했습니다. -nowin32manifest 컴파일러 플래그를 사용해 볼 수도 있습니다 . 나는 그것을 테스트하지 않았습니다. Visual Studio 2017에서 stuartd의 "매니페스트없이 애플리케이션 만들기"가 표시되지 않습니다. 나는 이것이 그것이하는 일이라고 생각합니다.

<PropertyGroup>
  <NoWin32Manifest>true</NoWin32Manifest>
</PropertyGroup>

나는 또한 내 .csproj:

<GenerateManifests>false</GenerateManifests>

0

내 버전의 Visual Studio 2017, 버전 15.6.6 (이전에있을 수 있음)에서 응용 프로그램 파일이 오른쪽 클릭 Exe 프로젝트 및 게시에 있지 않고 프로젝트 속성 게시 탭에서 찾을 수 있습니다. 설치에 넣을 애플리케이션 파일의.

그러니 문제가되는 것을 꺼내십시오. 이 앱이 설치 될 컴퓨터에 이미 무언가가 설치되어있는 경우, 실행을 위해 참조가 필요한 경우를 제외하고는 어쨌든 다시 설치할 이유가 없습니다. 이미 PC에있는 것을 설치하지만 다른 폴더에 설치하는 경우 작동하지 않을 수 있습니다. 다른 응용 프로그램이나 dll 어셈블리를 이전에 설치된 것과 동일한 위치에 사용하는 것이 가장 좋습니다.


0

몇 분 전에 동일한 문제가 발생했으며 다음은 해결하는 데 사용한 단계입니다.

  • a = 기본 프로젝트 (게시하려는 프로젝트, 예 : myProduct)
  • b = 참조 프로젝트 (예 : MyProductSiteServer)

체크리스트

  1. 속성-> 애플리케이션-> 리소스-> 아이콘 및 매니페스트 확인 (a 및 b 모두)

  2. 속성으로 이동-> 빌드 : a와 b가 동일한 대상 플랫폼에 있는지 확인합니다.

  3. 속성-> 보안으로 이동하여 a와 b가 "ClickOnce 보안 설정 사용"및 "완전 신뢰 응용 프로그램입니다"설정이 선택되어 있는지 확인합니다.

  4. 속성-> 게시로 이동하십시오. 게시 폴더의 경로를 변경하는 것이 좋습니다.


0

내 VS 2019 응용 프로그램에서 똑같은 문제가 발생했습니다.

매니페스트없이 응용 프로그램을 만들려고 시도했지만 작동하지 않았습니다.

그러나 작동 한 것은 다음과 같습니다.

  1. 빌드-> 게시-> 응용 프로그램으로 이동합니다.
  2. "어셈블리 정보"버튼을 클릭합니다.
  3. "Make assembly COM-Visible"옵션을 선택합니다.

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.