Datei oder Assembly konnte nicht geladen werden Windows.winmd '

8

Meine WPF Desktop-App verwendet ebenfalls WinRT-Klassen.

Um das zu tun, folge ich diesem Tutorial Ссылка .

Gut, es funktioniert.

Wenn ich jetzt versuche, die MSI-Datei zu erzeugen (ich habe beides mit Microsoft Installer und ClickOnce versucht), bekomme ich diesen Fehler:

Problem beim Erzeugen des Manifests. Konnte Datei oder Assembly 'C: \ Programme (x86) \ Windows Kits \ 8.1 \ References \ CommonConfiguration \ Neutral \ Windows.winmd' oder eines seiner Abhängigkeiten nicht laden. Versuch, ein Programm mit einem falschen Format zu laden.

Ich habe bereits versucht, ClickOnce wie vorgeschlagen zu deaktivieren hier , mit dem Löschen des Projekts und dem temporären Löschen von ASP.NET des anderen NET-Frameworks.

Dies ist mein Startup-Tag in meiner app.config                    

Ich verwende VS2015 und C # Wie kann ich es reparieren und meine MSI generieren?

PS: Ich habe kein Problem mit einer einfachen WPF-Desktop-App eine weitere MSI zu generieren.

    
eeadev 25.09.2015, 13:16
quelle

1 Antwort

25

Ja, die Windows.winmd-Datei, die Sie als Referenz hinzugefügt haben, behindert die Bereitstellung des Projekts. Die Werkzeuge, die Sie verwenden, sind verwirrt über ihren Inhalt, sieht genau wie eine .NET-Assembly aus. Aber es ist nicht, das .winmd-Dateiformat ist eine Erweiterung des alten COM-Typ-Bibliotheksformats. Für WinRT verwendeten sie das Metadatenformat von .NET, um die Einschränkungen des TLB-Dateiformats zu umgehen.

Das war eine ziemlich gute Idee, viele .NET-Tools können die Metadaten unverändert verwenden. Wie Compiler und Disassemblierer mussten sie diese Infrastruktur nicht vollständig einrichten. Aber es spielt genau die Rolle einer Referenz-Assembly , nur der Compiler verwendet seinen Inhalt und sollte niemals implementiert werden. Gerade jetzt magst du diese gute Idee nicht zu viel:)

Es ist jedoch sehr einfach, es für eine ClickOnce-Bereitstellung zu reparieren. Verwenden Sie Projekt & gt; Eigenschaften & gt; Registerkarte "Veröffentlichen" & gt; Schaltfläche "Anwendungsdateien" Ändern Sie die "Publish Status" Auswahl für Windows.winmd zu "Ausschließen". Bildschirmbeispiel eines Beispielprojekts:

Es ist nicht sehr klar, was Sie mit "Microsoft Installer" meinen, ich gehe davon aus, dass Sie über ein Setup-Projekt sprechen. Obwohl es aufgrund von chronischen Problemen aus Visual Studio entfernt wurde, ist es immer noch in der Galerie verfügbar.

Das ist eine härtere Nuss zum knacken, normalerweise würden Sie den Add & gt; Project Output Kontextmenüeintrag, um die Abhängigkeiten herauszufinden. Das geht nicht mehr, es stirbt mit miserabler unscheinbarer Fehlermeldung:

  

FEHLER: Beim Validieren ist ein Fehler aufgetreten. HRESULT = '80070057'

Der Fehlercode bedeutet "Ungültiger Parameter", der das Problem nicht eingrenzen kann. Sie können jedoch davon ausgehen, dass es bei dem Versuch, die Windows.winmd-Referenz in der EXE-Assembly aufzulösen, abstirbt.

Die Problemumgehung besteht darin, nicht die Abhängigkeiten automatisch erkennen zu lassen, sondern sie selbst auszuwählen. Wählen Sie im Editor-Bildschirm "Dateisystem auf dem Zielcomputer" den Anwendungsordner aus. Klicken Sie mit der rechten Maustaste auf "Primäre Ausgabe von ..." und wählen Sie Löschen.

Klicken Sie mit der rechten Maustaste auf Anwendungsordner & gt; Hinzufügen & gt; Datei und wählen Sie die .exe-Datei des Projekts aus dem Ordner bin \ Release. Wiederholen Sie dies für andere Dateien. Sie können die Datei, die Sie in der Liste der ClickOnce-Anwendungsdateien erhalten haben, als Leitfaden verwenden.

Erstellen Sie das Projekt, jetzt erhalten Sie:

  

WARNUNG: Die Abhängigkeit 'WINDOWS' (Signature = '(null)' Version = '255.255.255.255') der Assembly 'WindowsFormsApplication144.exe'

konnte nicht gefunden werden

Was völlig gutartig ist, wir wollen es nicht finden, das Programm Setup.exe funktioniert gut.

    
Hans Passant 27.09.2015, 16:41
quelle

Tags und Links