2010-10-22 7 views
13

Ich habe ein Problem mit Ressourcendateien.Wie verwende ich eine freigegebene Ressourcendatei zwischen Projekten in einer Lösung?

Ich habe eine Lösung mit zwei Projekten. Das erste Projekt enthält ImageResource.resx Datei mit den Bildern, die ich verwende. Jedes Form in diesem Projekt kann auf diese Datei vom Designer zugreifen. Aber ich kann in der Designer ImageResource.resx Datei sehen, um es vom zweiten Projekt zu verwenden (Verweis auf zweites Projekt ist vorhanden).

Ich habe die ImageResource.resx Datei als Link zu meinem zweiten Projekt hinzugefügt. Und ich habe es im Designer gesehen! Aber wenn ich ein Bild von dieser Ressource im zweiten Projekt verwendet Visual Studio meine ursprüngliche Datei (Es setzt die Namespaces und andere ..) und meine Lösung bricht. Auch Visual Studio sagt mir, dass ImageResource.resx vorhanden ist, in zwei DLL first_project.dll und second_project.dll

Kann jemand mir helfen, mit Wie Sie sich richtig für gemeinsam genutzte Ressourcen zwischen Projekten verwenden?

Antwort

28
  1. Die richtige Methode zum Freigeben von Ressourcen ist das Erstellen eines globalen freigegebenen Projekts. Erstellen Sie ein neues Projekt mit dem Namen Ressourcen:

Solution Explorer, showing an example solution, which contains a project named *Resources*

  1. Als nächstes müssen wir einige Ressourcen hinzuzufügen (zB Icons) für das Projekt. Mach das wie üblich. Wechseln Sie zur Projekteinstellung, wählen Sie die Registerkarte Ressourcen und Vorhandene Datei hinzufügen ... zum Projekt. Wir können sehen, dass das Symbol in das Projekt eingefügt und wurde in den lokalen Ordner kopiert:

For example, the Resources project's Resources tab shows a picture of a puppy, and the Solution Explorer shows that the Resources project's Resources folder includes the picture of the puppy

  1. Der nächste Schritt besteht zum anderen dieses Symbol des Hinzufügens Projekt (e). Beachten Sie den wichtigen Unterschied, dass Sie dieses Symbol als Link hinzufügen müssen!

    Das Hinzufügen als Link vermeidet die Ressourcenduplikation. Erstellen Sie ein neues Projekt innerhalb der gleichen Lösung und nennen Sie es z. Haupt. Erstellen Sie einen Ordner in diesem neuen Projekt und nennen Sie ihn Ressourcen (der logische Name für unseren Zweck). Klicken Sie dann mit der rechten Maustaste auf diesen Ordner, wählen Sie Bestehendes Objekt hinzufügen ... und wählen Sie die Bilddatei aus dem freigegebenen Projektordner.Stellen Sie sicher, dass Sie als Link hier verwenden! Wenn es richtig das Symbol der neu hinzugefügte Datei getan wird etwas anders aussehen (siehe unten):

In the *Add Existing Item* dialog, choose the *Add As Link* option from the *Add* button's drop-down list

Added Ressource Symbol muss aussehen dieses

In Solution Explorer, the Main project's icon for the puppy Resource has an arrow on the icon, whereas the Resources project's icon for the puppy Resource does not have an arrow on the icon

  1. Jetzt müssen wir die Erstellungsaktion für diese Datei auf setzen Keine. Wählen Sie dazu die Datei aus und gehen Sie zu Eigenschaften Fenster. Wählen Sie Keine für Build Aktion. Wir müssen dies tun, die Einbettung dieses Symbol in der Montage zu vermeiden:

In Solution Explorer, change the *Main* project's puppy resource's properties. Choose a Build Action of *None*

  1. Schließlich müssen wir die verknüpften Dateien auf die Ressourcen des entsprechenden hinzufügen Projekt. Öffnen Sie das Projekt Eigenschaften für das Projekt, wo wir gerade die Dateien hinzugefügt. Wählen Sie die Ressourcen Reiter und ziehen Sie die verknüpfte Datei dort:

Drag the linked image from the Solution Explorer's *Main* project's resources to the *Main* project's resources tab's viewing pane

Dies sind die fünf einfachen Schritten ausgeführt werden müssen Symbole zwischen den Projekten zu teilen. Sie könnten fragen: "Was sind die Vorteile davon?" Die Vorteile sind:

  • Wir speichern Ressourcen an einem Ort, und
  • Es ist einfach ein Symbol mit einem neuen zu ersetzen.
+1

Ich habe ansver auf stackoverflow bewegt .. – Yuriy

+0

Diese Antwort scheint zu fehlen ein wenig Text? –

+0

Erlauben Sie mir zu fragen "Was ist der Nutzen davon?" :-) –

1

Können Sie einen symbolischen Link verwenden, um die Datei in mehreren Ordnern zu teilen?

Fenster:

mklink linked_location\ImageResource.resx original_location\ImageResource.resx 


C:\Users\preet>mklink 
Creates a symbolic link. 

MKLINK [[/D] | [/H] | [/J]] Link Target 

     /D  Creates a directory symbolic link. Default is a file 
       symbolic link. 
     /H  Creates a hard link instead of a symbolic link. 
     /J  Creates a Directory Junction. 
     Link specifies the new symbolic link name. 
     Target specifies the path (relative or absolute) that the new link 
       refers to. 
1

Wenn eine Ressource-Datei wirklich zwischen den Projekten gemeinsam genutzt wird, sollten Sie es in einem gemeinsamen Projekt gesteckt.

Solution 'Sample' 
    Project Sample.Data 
    Project Sample.Business 
    Project Sample.UI 
    Project Sample.Resource //shared resources are put in a shared project 
+0

Projekt hat die gleiche Struktur was du sagst. Das Problem ist, dass ich "Project Sample.Resource.ImageResource.resx" in "Project Sample.UI" im Designer nicht sehen kann. Ich muss auf die 'myForm.designer.cs' gehen und manuell' button.Image = Sample.Resource.ImageResource.SomeImage' .. und später, wenn VS 'myForm.designer.cs'-Zeile, wo ich ein Bild für eine Schaltfläche wird 'button.Image = ((System.Drawing.Image) (resources.GetObject (" SomeImage.Image ")));' Und VS automatisch einfügen (Kopieren) von ImageResource.resx-Datei SomeImage in Ressourcendatei für bestimmtes Formular .. :( – Yuriy

+0

siehe meine unswer über diese Frage .. – Yuriy

+0

@Yuriy: Der Link ist kaputt (vielleicht weil ich in China bin und einige Webseiten von der Regierung blockiert werden). Und mehr zu meiner Antwort, ich denke, Sie haben einige Optionen falsch eingestellt (aber tut mir leid, dass ich mich nicht mehr an die Einstellungen erinnere). Ich habe einmal an einem Projekt gearbeitet, das seine Ressourcen zwischen einigen Projekten teilt, genau wie Ihre Lösung. Wir Programmierer verwenden so wie das, was ich in meiner Antwort gesagt habe und es funktioniert wirklich. –

0

Sie die Ressource nicht sehen können, wenn sie nicht öffentlichen ist, und es ist standardmäßig auf „Friend“. Sie können den "Access Modifier" im Visual Designer (oben rechts) einstellen.

+0

siehe meine unswer über diese Frage .. – Yuriy

0

Dies funktionierte nicht für mich und ich fand einen anderen Ansatz (VS2015 +). Siehe https://stackoverflow.com/a/45471284/4151626

Kurz gesagt, das gemeinsame Projekt wird direkt in das periphere Projekt einbezogen. Daher unterstützt die IDE keine <Resource> Elemente im freigegebenen Projekt. <Resource> Elemente können über einen Texteditor zum freigegebenen Projekt hinzugefügt werden. Sie werden dann während des Builds in das periphere Projekt eingebunden.

(Apologies für die Hyper-Link. Ich würde nur für Klarheit die Antwort umbuchen, aber die Redakteure knacken Stackoverflow auf diese nach unten, Löschen von doppelten Antworten, die Sie aus ??? zu speichern.)