Wie kann ich den Windows Forms-Designer dazu bringen, Ressourcen von externen Assemblys zu verwenden?

8

Ich habe einige Ressourcen (Bilder in diesem Fall) in einer Ressourcendatei, die ich für Steuerelemente in meinem Windows Forms-Projekt verwende. Das Dialogfeld "Ressourcenauswahl in Visual Studio" bietet keine sehr gute Unterstützung für die Auswahl von Bildern aus Ressourcendateien, es sei denn, sie befinden sich an bestimmten Positionen. Sie können die Designerdatei jedoch direkt bearbeiten. Dies funktioniert problemlos. Die Anwendung wird kompiliert und ordnungsgemäß ausgeführt, und der Windows Forms-Designer ist intelligent genug, um den von Hand erstellten Code nicht zu beschädigen.

%Vor%

Nun möchte ich diese Ressourcen auf eine externe Assembly verschieben, damit sie von mehreren Anwendungen verwendet werden können. Ich kann eine Assembly einrichten, um ihre Ressourcen ohne Probleme verfügbar zu machen (solange ich Visual Studio 2008 oder höher verwende), und das funktioniert einwandfrei. Wenn ich den Designer-Code so ändere, dass er auf das Bild von seinem neuen Speicherort verweist, wird der Code korrekt kompiliert und ausgeführt, aber jetzt ändert der Windows Forms-Designer meinen Code, wenn Code generiert wird. Es bettet die Binärdatei des Bildes in die lokale Ressourcendatei ein und referenziert es von dort.

%Vor%

wird vom Windows Forms-Designer in

geändert %Vor%

Der Windows Forms-Designer scheint zu verstehen, dass er eine Ressource aus derselben Assembly zieht, aber keine externe. Gibt es eine Möglichkeit, den Windows Forms-Designer zu ermöglichen, eine Ressource von einer externen Assembly zu verwenden?

    
Kevin Kibler 01.09.2010, 14:50
quelle

2 Antworten

2

Nein, der Designer unterstützt das nicht. Wichtig ist, dass es so funktioniert, dass die Lokalisierung durch Satelliten-Assemblies nicht funktionieren würde.

Sie können dies tun, aber Sie müssen den Code selbst schreiben. So ziemlich alles, was Sie in der Datei Resources.Designer.cs finden. Überlegen Sie, ob dies die Mühe wert ist, es ist nicht sehr wartungsfreundlich und das Teilen von Ressourcen-Assemblies ist nicht viel von einer Optimierung. Eine Terabyte-Festplatte ist weniger als hundert Dollar.

Btw: nie bearbeiten Sie die Datei Resources.Designer.cs selbst.

    
Hans Passant 01.09.2010, 16:13
quelle
3

Ich habe den genauen dasselbe Problem und es kann einen alternativen Ansatz geben, abhängig von Ihrer Code-Basis. Wenn die Eigenschaften, die geändert wurden, um auf eine bestimmte Ressource zu verweisen, auf benutzerdefinierten Steuerelementen stehen, können Sie diesen Eigenschaften das Attribut [[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] hinzufügen (diese überschreiben oder gegebenenfalls ausblenden), und der Designer lässt sie in Ruhe.

Wenn sich die Eigenschaften jedoch auf grundlegenden UI-Elementen befinden (z. B. Form.BackgroundImage), müssten Sie diese ebenfalls überschreiben oder ausblenden, und ich bin mir nicht sicher, wie wünschenswert das ist.

    
Kohanz 21.10.2011 18:51
quelle