2015-07-10 13 views
6

Dies ist nicht in jedem Zusammenhang mit diesem Problem WegWenn eine lange Zeichenfolge hinzufügen, Syntax-Hervorhebung nicht mehr funktioniert

broken syntax highlight example

Die IDE ich benutze ist von Visual Studio Ultimate 2013

Zu Demonstrationszwecken die lange Zeichenfolge ist ein Base64-codiertes Bild 44.517 Zeichen lang (zu groß, um hier in einen Codeblock einzufügen, damit ich es auf Pastebin)

haben

Der Grund, warum ich das Bild direkt einbetten In die Klasse gehört Faulheit. Ich möchte nicht alle Bilder als Ressourcen für jedes Projekt hinzufügen, in dem ich diese Klasse verwenden möchte, und da Resources das Bild sowieso aus einer Base64-kodierten Version lädt, ist dies funktional nicht anders, hat aber den Vorteil, die Klasse zu einem Drop zu machen -in Objekt (eingebettet, nicht als zusätzliche DLL kompiliert).

CodeSense funktioniert weiter, aber wie Sie sich vorstellen können fehlende Syntax-Hervorhebung, fühle ich mich wie meine Entwicklungsumgebung nur zeitverschoben rückwärts 20+ Jahren.

Irgendwelche Vorschläge, wie man dieses Problem beheben kann UND die Bilder immer noch direkt in die Klasse einbetten. (Ja, ich weiß, ich möchte meinen Kuchen haben UND es essen - sonst warum einen Kuchen?)

+0

Ist "dieses Problem" in Ihrem ersten Satz ein Link zu einem anderen Thema? – BoltClock

+0

* 'Resources' lädt das Bild trotzdem aus einer Base64-kodierten Version * => Ich glaube, dass es in der resx-XML-Datei als base64 gespeichert ist, aber bei der Kompilierung in eine binäre Ressource konvertiert wird. Außerdem könnten Sie eine resx-Datei verwenden, die sich in derselben Assembly befindet, die Ihre Klasse deklariert. –

+0

@LucasTrzesniewski - Ein Resx für die Assembly würde bedeuten, dass ich jedes Mal, wenn ich diese Klasse verwenden möchte, die Ressourcen von Hand zu jedem Projekt hinzufügen muss. Dies wird dadurch beseitigt, dass das Objekt direkt in der Klasse eingebettet ist. Minimierung des Verteilungschaos, indem alles so eigenständig wie möglich gehalten wird. (z. B. Portable Single File Executable oder wie manche monolithischen Build sagen) –

Antwort

8

Dieses Problem wurde in Visual Studio 2015 behoben. Ich kann es dort nicht mit dem Code aus Ihrem Pastebin reproduzieren. Ich konnte es jedoch in VS2013 reproduzieren, also sind es nicht nur Sie.

In der Zwischenzeit ist eine Lösung, die sofort in den Sinn kommt, das Literal in Stücke zu teilen, da Hervorhebung gut funktioniert, wenn die Literale kurz genug sind. Selbst zwei 20-Kilobyte-Stücke machen es in meinem Fall. Ich bin nicht sicher, was die magische Zahl ist, aber es ist wahrscheinlich nicht wert zu versuchen, es herauszufinden.

Scratch dass - die magische Zahl ist, wie ich vermutete, 32.768, durch liberale Verwendung von Kopieren und Einfügen gefunden. Dieses Limit bezieht sich speziell auf die Gesamtlänge einer einzelnen Codezeile, einschließlich Leerzeichen und Interpunktion (Anführungszeichen, Parens usw.). Stellen Sie daher beim Chunking des Zeichenfolgenliterals sicher, dass sich jeder Chunk in einer eigenen Zeile befindet. Es ist in Ordnung, sie in einer einzigen Anweisung zu verketten, solange die Anweisung über mehrere Zeilen verteilt ist.

+0

gehen, um dies zu versuchen, wie ich glaube, dass Sie richtig sind. du würdest nicht zufällig wissen, wie groß die maximale Größe ist, in die ich hineinhauen kann? –

+1

@Sanuel Jackson: Ich werde es nicht herausfinden, aber ich bin mit ein paar schnellen Schritten und ein bisschen Herumspielen darüber gestolpert. Habe gerade meine Antwort aktualisiert. – BoltClock

+0

Nur getestet, und es funktioniert. Bitte aktualisieren Sie Ihre Antwort zu beachten, dass das Limit enthält "" (Zitate) um den String. So technisch ist die maximale String-Länge 32766 mit umgebenden Anführungszeichen. –

0

Sie versucht, statische Variable zu deklarieren und laden Sie es aus der TXT-Datei? und legen Sie den Byt-Wert in der TXT-Datei. oder Sie können die Zeichenfolge innerhalb mehr als Variable teilen!

+0

wenn dies tun könnte ich nur das Bild selbst laden:) .... benötigen keine zusätzlichen Dateien –

+0

@SanuelJackson Sie können alles in Ressourcen stecken. – PetSerAl

+0

@PetSerAl ~ der Schlüssel ist 'Ich möchte nicht alle Bilder als Ressourcen für jedes Projekt hinzufügen, ich möchte diese Klasse verwenden'. Mit anderen Worten, es sollte kompakt und in sich geschlossen und vollständig natürlicher eingebetteter Code für jedes Projekt sein. Ich möchte die Klasse ohne externe Abhängigkeiten verwenden. [Diese Lösung] (http://stackoverflow.com/a/31349096/3504007) löste das Problem und behielt alles in sich. –

Verwandte Themen