it-swarm.com.de

Fehler beim Bereitstellen der ClickOnce-Anwendung - Die Referenz im Manifest stimmt nicht mit der Identität der heruntergeladenen Assembly überein

Ich versuche, eine ClickOnce-Anwendung bereitzustellen, die Installation schlägt jedoch auf dem Client fehl. Hier ist das Fehlerprotokoll:

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.

Das wichtigste Exe, das ich bereitstellen muss, ist MyProductFrontDesk.exe, das eine Abhängigkeit von MyProductSiteServer.exe hat - und das scheint der Ort zu sein, an dem der Fehler ausgelöst wird: "Die Referenz im Manifest stimmt nicht mit der Identität der heruntergeladenen Assembly MyProductSiteServer.exe überein."

Welches Manifest muss korrigiert werden? Und wie?

82
Shaul Behr

Es gab ein Problem mit Visual Studio 2008, das gelöst wurde, indem das Standardmanifest nicht eingebettet wurde - Einer der Kommentare in diesem Artikel legt nahe, dass das Problem weiterhin in Visual Studio 2010 besteht.

In den Projekteigenschaften -> Anwendung Registerkarte -> Ressourcen -> Kontrollkästchen Symbol und Manifest verursachte die Einstellung "Manifest mit Standardeinstellungen einbetten" das Problem. Wenn Sie "Anwendung ohne Manifest erstellen" festlegen, wird das Problem behoben.

97
stuartd

Ich hatte das gleiche Problem, als ich einen Verweis auf ein anderes Projekt hinzufügte.

Die Lösung bestand darin, in allen Projekten, auf die verwiesen wurde, die ClickOnce-Sicherheitseinstellungen zu aktivieren , wie Ian erklärte hier (Hervorhebung meiner):

Für mich war die Art und Weise, wie dies gelöst wurde, sicherzustellen, dass alle Projekte unter der Lösung, die das " Sicherheitsregister " enthüllten, in ihrem " Projekteigenschaften "hatten die Option" ClickOnce-Sicherheitseinstellungen aktivieren "Mit der Option markiert" Dies ist eine vollständige Vertrauensanwendung "Ausgewählt. Dies hat mit der korrekten Erstellung des Manifests zu tun, und die Anwendung wird nicht installiert, wenn diese Optionen nicht für alle Projekte in der Projektmappe festgelegt sind, für die dies erforderlich ist.

Ich bin der Meinung, dass dies der richtige Weg ist, um das Problem zu beheben, wenn Sie auf ein anderes Projekt unter derselben Lösung verweisen.

Der verlinkte Forumsbeitrag ist inzwischen abgelaufen, aber im Archiv verfügbar hier .

47
Mauro

Ich hatte das gleiche Problem, aber meine Lösung war sehr unterschiedlich.

Meine ClickOnce-Anwendung hat in meiner Projektmappe auf ein anderes EXE-Datei-Projekt verwiesen. Wenn der Client sie also herunterlud und es eine andere EXE-Datei gab, hatte diese keine Manifestdatei.

Das Entfernen der Abhängigkeit von einer anderen ausführbaren Datei hat mein Problem behoben.

35
skimania

Ich habe bestätigt, dass das Problem auch in Visual Studio 2010 vorliegt. Durch Auswahl von "Anwendung ohne Manifest erstellen" in Projekteigenschaften - Anwendung - Ressourcen wurde das Problem gelöst. 

9
Eduardo

Dies kann auch passieren, wenn Sie zwei verschiedene Versionen eines NuGet - Pakets haben, auf das in verschiedenen DLL - Dateien in Ihrem Projekt verwiesen wird. In meinem Fall habe ich ein Framework namens Catel verwendet, und ich hatte eine neuere Version in einer DLL -Datei als in einer anderen Datei (Versehen). Dies hat jedoch dazu geführt, dass ClickOnce diesen Fehler ausspuckte. Durch Verweis auf dieselbe Version wurde das Problem behoben.

6
Bitfiddler

Ich hatte das gleiche Problem, aber meine Lösung bestand darin, das 'Plattformziel' in 'x86' zu ändern (Projekteigenschaften -> Registerkarte "Erstellen"). Es wurde auf Any CPU gesetzt. Sobald ich die Einstellung geändert und erneut veröffentlicht habe, konnte das ClickOnce-Installationsprogramm abgeschlossen werden.

4
Paul Whygle

Ich hatte genau das gleiche Problem. Ich konnte die Abhängigkeit nicht entfernen, da sie vom Hauptprojekt benötigt wurde. Das zweite Projekt war ein Konsolenprojekt.

Ich habe zu Class Library gewechselt und dann hat alles funktioniert.

3
user2971656

Der gleiche Fehler ist aufgetreten, wenn das Projekt auf Debug eingestellt wurde. Als es wieder zu Release geändert wurde, ist kein Fehler aufgetreten. 

2
Dave

Eine weitere Problemumgehung für den Fall, dass das Abhängigkeits-Exe mit dem fehlerhaften App-Manifest nicht geändert werden kann (beispielsweise aus einem NuGet-Paket). Die Binärdatei kann als Inhalt mit einer Dummy-Erweiterung enthalten sein. ClickOnce versucht daher nicht, das Manifest zu überprüfen, und wird beim Start der App umbenannt.

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

AUCH FÜR ClickOnce .exe aufgerufene .exe aufgerufene .exe.

Ich hatte dieses Problem auch mit VB.NET in Visual Studio 2010.

Ich habe eine ClickOnce Windows Forms-Anwendung, die auf eine zweite Windows Forms-Anwendung verweist, die wiederum auf eine dritte Windows Forms-Anwendung verweist. (Diese zweite und dritte Anwendung sind der Einfachheit halber EXE anstelle von DLL - Datei), da sie gleichermaßen wahrscheinlich eigenständig ausgeführt werden oder mit Eigenschaften aufgerufen werden, die an sie übergeben werden.

Ich musste BEIDE den Inhalt der second und dritten Anwendungen auskommentieren:

Exemplarische Vorgehensweise: ClickOnce-Anwendung manuell bereitstellen

Es funktioniert perfekt.

1

Ich hatte das gleiche Problem und habe alle hier vorgeschlagenen Lösungen ausprobiert, und alle haben nicht funktioniert.

Ich habe es behoben, indem ich den Aktualisierungsort geändert habe. Aus den Projekteigenschaften -> Publish -> Updates . Ändern Sie den Aktualisierungsort in Ihren veröffentlichten Ordner.

1
Majid Alshezawi

Ich verwende Visual Studio 2012 unter Windows 7 und muss eine Lösung veröffentlichen, die aus zwei Projekten besteht.

Wie Eduardo darauf hinweist, dass das Markieren beider Projekte als ClickOnce und das Aktivieren von Full Trust Application das Problem lösen.

0
user819490

Ich hatte ein etwas anderes Problem, das ich lösen konnte, und deshalb wollte ich posten. Meine Probleme waren, dass ich 3 Niederlassungen von TFS ausführte. Ich hatte die Telerik-Steuerungen in einer meiner Filialen aufgerüstet, die anderen jedoch nicht. Nachdem ich die Telerik-Steuerungen in allen drei Filialen aufgerüstet und neu veröffentlicht hatte, funktionierte das Problem und dieser Fehler wurde behoben. 

Ich habe damals VS2015 ausgeführt.

0
jaredbaszler

In meiner Version von Visual Studio 2017, Version 15.6.6 (die aber schon früher vorhanden war) habe ich festgestellt, dass sich die Anwendungsdateien nicht im Rechtsklick-Projekt und im Veröffentlichen befanden, sondern unter der Registerkarte "Projekteigenschaften" auf der Registerkarte "Publizieren", wo Sie welche festlegen können der Anwendungsdateien, die in die Installation eingefügt werden sollen.

Nehmen Sie also diejenigen heraus, die ein Problem darstellen. Wenn auf einem Computer, auf dem diese App installiert werden soll, bereits etwas installiert ist, gibt es keinen Grund, sie trotzdem neu zu installieren, es sei denn, Sie benötigen die Referenz, damit sie ausgeführt werden kann. Wenn installiert werden sollte, was bereits auf dem PC vorhanden war, aber in einem anderen Ordner, funktioniert es möglicherweise nicht. Am besten verwenden Sie die anderen Anwendungen oder DLL-Assemblys an dem gleichen Ort, an dem sie zuvor installiert wurden. 

0
John Foll

Wenn Sie ein Hauptprogramm haben, das auf ein anderes verweist, müssen Sie den Trick "Anwendung ohne Manifest erstellen" für das Programm des Hauptprogramms ausführen:

Projekt -> Eigenschaften -> Registerkarte Anwendung -> Ressourcen -> Manifest -> Dropdown "Anwendung ohne Manifest erstellen"

und wechseln Sie dann zu den Projekteigenschaften des referenzierten Programms und wiederholen Sie den Vorgang.

0
RoySeberg

Es ist interessant. Ich implementiere einfach die Anwendung und löste das Problem. Möglicherweise ist eine Datei aufgrund eines Netzwerks beschädigt.

0
huseyindotpw

Ich benutze mage.exe, um mein Manifest zu erstellen. Das Hinzufügen zu meinem .csproj hat das Problem behoben. Sie können auch das -nowin32manifestCompilerflag versuchen ; Ich habe es nicht getestet. Ich kann stuartds "Anwendung ohne Manifest erstellen" nicht in Visual Studio 2017 sehen. Ich denke, das ist es, was es tut.

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

Ich habe auch dies in meinem .csproj:

<GenerateManifests>false</GenerateManifests>
0
DharmaTurtle

Ich hatte vor ein paar Minuten das gleiche Problem, und unten sind die Schritte, die ich zur Lösung dieses Problems unternommen habe.

Schlüssel

  • a = Hauptprojekt (das Projekt, das Sie veröffentlichen möchten, z. B. myProduct)
  • b = Referenzprojekt (z. B. MyProductSiteServer)

Checkliste

  1. Navigieren Sie zu Eigenschaften -> Anwendung -> Ressourcen -> Überprüfen Sie die Symbole und das Manifest (für a und b).

  2. Navigieren Sie zu Eigenschaften -> Erstellen: Stellen Sie sicher, dass sich a und b auf derselben Zielplattform befinden

  3. Navigieren Sie zu Eigenschaften -> Sicherheit, und stellen Sie sicher, dass a und b diese Einstellungen aktiviert haben: "Aktivieren Sie die ClickOnce-Sicherheitseinstellungen" und "Dies ist eine vollständige Vertrauensanwendung".

  4. Navigieren Sie zu Eigenschaften -> Veröffentlichen: Ich empfehle Ihnen, den Pfad des Veröffentlichungsordners zu ändern

0
Kingsley Akpan