web-dev-qa-db-fra.com

Erreur lors du déploiement de l'application ClickOnce - La référence dans le manifeste ne correspond pas à l'identité de l'assembly téléchargé

J'essaie de déployer une application ClickOnce, mais l'installation échoue sur le client. Voici le journal des erreurs:

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.

L'exécutable principal que je dois déployer est MyProductFrontDesk.exe, qui a une dépendance sur MyProductSiteServer.exe - et cela semble être à l'origine de l'erreur: "La référence dans le manifeste ne correspond pas à l'identité de Assembly MyProductSiteServer.exe téléchargé".

Quel manifeste doit être corrigé? Et comment?

82
Shaul Behr

Il y avait un problème avec Visual Studio 2008 qui a été résolu en n'incorporant pas le manifeste par défaut - l'un des commentaires sur cet article suggère que le problème existe toujours dans Visual Studio 2010.

Dans les propriétés du projet -> onglet Application -> Ressources -> case à cocher Icône et manifeste, le paramètre "Inclure le manifeste avec les paramètres par défaut" a été à l'origine du problème. Le régler sur "Créer une application sans manifeste" résout le problème.

97
stuartd

J'ai eu le même problème lorsque j'ai ajouté une référence à un autre projet. 

La solution à ce problème consistait à activer les paramètres de sécurité ClickOnce dans tous les projets référencés, comme Ian l'a expliqué ici (souligné par moi):

Pour moi, cela a été résolu de manière à ce que tous les projets de la solution qui exposaient "Security Tab" dans leurs "Project Properties" aient l'option "Enable ClickOnce Security Settings "Coché avec l'option" Ceci est une application de confiance totale "sélectionnée. Cela concerne la création correcte du manifeste et l'application ne s'installera pas si ces options ne sont pas définies sur tous les projets de la solution qui en ont besoin.

Je pense que c’est la bonne façon de régler le problème lorsque vous faites référence à un autre projet dans la même solution.

Le message lié au forum a expiré, mais il est disponible sur archive ici .

39
Mauro

Je rencontrais le même problème, mais ma solution était très différente.

Mon application ClickOnce faisait référence à un autre projet de fichier EXE dans ma solution. Ainsi, lorsque le client l'a téléchargé et qu'il y avait un autre fichier EXE, celui-ci ne contenait pas de manifeste.

Supprimer la dépendance sur un autre exécutable a résolu mon problème.

35
skimania

J'ai confirmé que le problème existait également dans Visual Studio 2010. La sélection de "Créer une application sans manifeste" dans les propriétés du projet - Application - Ressources a résolu le problème. 

9
Eduardo

Cela peut aussi arriver si vous avez deux versions différentes d'un paquet NuGet package référencé dans différents fichiers DLL de votre projet. Dans mon cas, j’utilisais un framework appelé Catel, et j’avais une version plus récente référencée dans un fichier DLL par rapport à un autre (oubli), mais ClickOnce a renvoyé cette erreur. Référencer la même version a résolu le problème.

6
Bitfiddler

J'ai eu le même problème, mais ma solution a été de changer la «cible de la plateforme» en «x86» (Propriétés du projet -> Onglet Construction). Il a été défini sur N'importe quel processeur. Dès que j'ai modifié le paramètre et republié, le programme d'installation ClickOnce a pu terminer.

4
Paul Whygle

J'ai eu exactement le même problème. Je ne pouvais pas supprimer la dépendance car le projet principal en avait besoin. Le deuxième projet était un projet de console.

J'ai changé pour Class Library , et puis tout a fonctionné.

3
user2971656

J'ai rencontré la même erreur lors du déploiement avec le projet défini sur Debug. Quand il a été changé en version, il n'y avait pas d'erreur. 

2
Dave

Une autre solution de contournement, au cas où l'exe de dépendance avec le manifeste de la mauvaise application ne pourrait pas être modifié (par exemple, provenant d'un package NuGet). Le fichier binaire peut être inclus en tant que contenu avec une extension fictive. ClickOnce n'essaie donc pas de valider le manifeste, puis est renommé lors du démarrage de l'application.

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");
        }
    }
}
2
Matthieu Maitre

J'avais le même problème et j'ai essayé toutes les solutions suggérées précédemment, et toutes ne fonctionnaient pas.

Je l'ai corrigé en changeant l'emplacement de la mise à jour. Depuis les propriétés du projet -> Publier -> Mises à jour . Changez l'emplacement de la mise à jour dans votre dossier publié.

1
Majid Alshezawi

J'utilise Visual Studio 2012 sur Windows 7 et j'ai besoin de publier une solution composée de deux projets.

Comme Eduardo l'a souligné, le fait de marquer les deux projets comme étant ClickOnce et d'activer Full Trust Application résout le problème.

0
user819490

J'avais un problème un peu différent que je pouvais résoudre et je voulais donc poster. Mon problème était que je courais 3 branches de TFS. J'avais mis à niveau les commandes Telerik dans l'une de mes succursales mais pas dans les autres. Une fois que j'ai mis à niveau les commandes Telerik dans les 3 succursales et que je les ai republiées, cela a fonctionné et cette erreur a disparu. 

Je courais VS2015 à l'époque.

0
jaredbaszler

Dans ma version de Visual Studio 2017, version 15.6.6 (mais il en existait peut-être plus tôt), j’ai constaté que les fichiers de l’application ne se trouvaient pas dans le projet Exe et clic avec clic droit, mais sous des fichiers d’application que vous souhaitez insérer dans l’installation.

Alors, enlevez ceux qui posent problème. Si quelque chose est déjà installé sur un ordinateur sur lequel cette application sera installée, il n'y a aucune raison d'essayer de la réinstaller de toute façon, sauf si vous avez besoin de la référence pour qu'elle s'exécute. S'il devait installer ce qui était déjà sur le PC, mais dans un autre dossier, cela pourrait ne pas fonctionner. Il est préférable d’utiliser les autres applications ou les assemblys DLL au même emplacement qu’ils avaient été précédemment installés. 

0
John Foll

Si vous avez un programme principal qui en référence un autre, vous devez exécuter l'astuce "Créer une application sans manifeste" dans le programme du programme principal:

Projet -> Propriétés -> Onglet Application -> Ressources -> Manifeste -> menu déroulant "Créer une application sans manifeste"

puis basculez sur Propriétés du projet du programme référencé et répétez le processus.

0
RoySeberg

C'est intéressant. Je viens de redéployer l'application et le problème résolu. Peut-être un fichier corrompu à cause du réseau.

0
huseyindotpw

J'utilise mage.exe pour générer mon manifeste. Ajouter ceci à mon .csproj a résolu le problème. Vous pouvez également essayer le -nowin32manifestindicateur du compilateur ; Je ne l'ai pas testé. Je ne vois pas "Créer une application sans manifeste" de stuartd dans Visual Studio 2017; Je pense que c'est ce qu'il fait cependant.

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

J'ai aussi ceci dans mon .csproj:

<GenerateManifests>false</GenerateManifests>
0
DharmaTurtle

J'ai eu le même problème il y a quelques minutes, et voici les étapes que j'ai utilisées pour le résoudre.

Clé

  • a = Projet principal (le projet que vous souhaitez publier, par exemple myProduct)
  • b = Projet de référence (par exemple, MyProductSiteServer)

Liste de contrôle

  1. Accédez aux propriétés -> Application -> Ressources -> icônes de contrôle et manifeste (pour a et b)

  2. Naviguez vers les propriétés -> Construire: assurez-vous que a et b sont sur la même plate-forme cible

  3. Accédez aux propriétés -> Sécurité et assurez-vous que les paramètres a et b sont cochés: "Activer les paramètres de sécurité ClickOnce" et "Ceci est une application de confiance totale"

  4. Accédez aux propriétés -> Publier: Je vous recommande de modifier le chemin du dossier de publication.

0
Kingsley Akpan