Ich bin es gewohnt, Ressourcen in C# einzubetten, und ich mag die Art, wie Namespaces automatisch den eingebetteten Ressourcen hinzugefügt werden. Das ermöglicht es mir, solche Dinge zu tun:Automatisches Hinzufügen von Namespaces basierend auf dem Pfad zu eingebetteten VB.NET-Ressourcen
files\version1\config.xml
files\version2\config.xml
files\version2\config.xml
Leider, wenn Sie das gleiche in einem VB.NET-Projekt versuchen, werden Sie Fehler kompilieren lassen, da sie alle eingebetteten Ressourcen in den Stammnamespace zu setzen versucht. Um dies zu umgehen kann ich manuell bearbeiten Sie die .vbproj
Datei wie folgt:
<EmbeddedResource Include="files\version1\config.xml">
<LogicalName>$(RootNamespace).files.version1.config.xml</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="files\version2\config.xml">
<LogicalName>$(RootNamespace).files.version2.config.xml</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="files\version3\config.xml">
<LogicalName>$(RootNamespace).files.version3.config.xml</LogicalName>
</EmbeddedResource>
Das funktioniert zwar, ist es manuelle, zeitaufwendig und fehleranfällig, so meine Frage ist: Kann ein Build-Task oder Buildereignis geschrieben werden kann das automatisch?
Ich nehme an, einfach hängt davon ab, wie Sie es betrachten. Ein ganz anderes Projekt hinzuzufügen, um das zu erreichen, ist einfach, aber ich würde es nicht einfach nennen. Ganz zu schweigen von der Tatsache, dass ich entweder eine andere DLL verteilen oder sie nach dem Build kombinieren müsste. Ich stimme das als Alternative ab, aber ich kann es nicht als Antwort akzeptieren, da ich nach einer Build-Aufgabe oder einem Build-Ereignis suche, das dies innerhalb desselben Projekts erreichen kann. –
True enough, ich mag es auch nicht, zu viele DLLs hinzuzufügen. Wie wäre es damit, alle Ihre Dateien in einem ähnlichen Format wie Sie zu haben? Schreiben Sie dann ein kurzes VBS-Skript, das die Ordner "Version ..." durchläuft und sie in einem Ausgabeverzeichnis zusammenfügt. Fügen Sie einfach einen Haken hinzu, um zu sehen, dass die Datei zuerst geändert wurde, so dass nicht jede Datei jedes Mal neu geschrieben wird. Sobald Sie alle diese Dateien als eingebettete Ressourcen markiert haben, werden sie durch das Überschreiben nicht zurückgesetzt. Wieder ist es eher ein Bandaid als ein richtiger Weg, aber man könnte zumindest den manuellen Teil entfernen. – DarrenMB