Nur auf die Kopfgeldanfrage reagieren. Zunächst einmal, die Verwendung von Build Action = Content beeinflusst den Build überhaupt nicht. Es ist eine Projektartikeleigenschaft, die andere Werkzeuge lesen können. Ein Installer-Builder verwendet es beispielsweise, um herauszufinden, dass die Datei in das Setup-Programm aufgenommen und auf dem Computer des Benutzers bereitgestellt werden muss.
Die Verwendung von Build Action = Eingebettete Ressource, wie in der oben genannten Frage festgestellt, war die Aufsicht des OP. Dadurch wird MSBuild angewiesen, die Datei im Assemblymanifest als Ressource einzubetten, wobei Assembly.GetManifestResourceStream() sie zur Laufzeit abruft.
Aber es ist ziemlich klar aus dem Kopfgeld Kommentar, dass Sie das auch nicht wollen. Der Fallback besteht darin, die Datei einfach auf den Zielrechner zu kopieren. Wo es geduldig sitzen wird, bis Sie es brauchen. Bemerkenswert ist, dass dies die nicht in irgendeiner Weise ändert die Größe des Pakets, das der Benutzer aus dem Store herunterlädt. Es benötigt den gleichen Speicherplatz, egal ob es sich um eine Baugruppe oder eine separate Datei im Paket handelt.
Also scratch das als eine Möglichkeit, weiter zu kommen.
Es macht einen Unterschied zur Laufzeit, die gesamte Baugruppe wird beim Laden in den virtuellen Speicher gemappt. Eine Assembly mit einer Ressource benötigt also mehr virtuellen Speicherplatz. Aber das Wort "virtual" ist sehr wichtig, es braucht nur sehr wenige Ressourcen des Telefons. Nur ein paar Bytes in den Seitenzuordnungstabellen für alle 4096 Byte in der Ressource. Sie beginnen nicht, für den virtuellen Speicher zu bezahlen, bis auf ihn zugegriffen wird. An diesem Punkt muss das Betriebssystem des Telefons es tatsächlich vom virtuellen in den physischen Speicher umwandeln. Oder, mit anderen Worten, laden Sie die Bytes der Ressource in den RAM. Dies unterscheidet sich nicht vom Laden einer Datei, sie wird auch beim Öffnen in den RAM geladen.
Also scratch das als eine Möglichkeit, weiter zu kommen.
Wir haben keine guten Gründe mehr, dies zu tun, Microsoft hat die Standardmethode für den Umgang mit Ressourcen als Best-Practice gewählt. Es ist. Aber manchmal haben Sie, um Inhalt als eine Datei bereitzustellen, einfach weil es zu groß ist. Einer, der 2 Gigabyte oder mehr treibt und den gesamten virtuellen Speicher auf einem 32-Bit-Betriebssystem verbraucht, so dass er unmöglich einer VM zugeordnet werden kann. Das Programm kann einfach nicht starten. Dies ist nicht die Art von Programm, mit der ein Telefonbenutzer wirklich sehr zufrieden sein wird.
Sie müssen sich dann auf die Packungsaufbauphase der Lösung konzentrieren, den letzten Schritt beim Erstellen einer Telefonanwendung. Die Datei, in der alle Projekte in der Lösung kompiliert wurden und die einzige Datei, die in den Store hochgeladen wurde und vom Benutzer heruntergeladen wurde, wurde erstellt.
Und ja, es gibt ein Problem dort, MSBuild ist nicht schlau genug, um die PCL-Bibliothek mit der Ressource zu sehen. Die Build-Aktion = Inhalt sollte gut genug sein, wie es für ein Installationsprogramm ist, aber das funktioniert nicht. Es wird nur Paket die DLL, nicht die Ressource. Es wurde davon ausgegangen, dass Sie es eingebettet haben, die Best-Practice-Lösung.
Was Sie tun müssen, ist das Paketmanifest zu überschreiben. Beschrieben in this MSDN article. Sehr, sehr hässlich, Sie suchen einen leeren blinkenden Cursor. Wo mir der gute Rat ausgeht, wurde das nicht getan.
ich versuche, eine Datei mit der Build Action auf Inhalt festgelegt zu lesen. – Martin