2010-02-09 4 views
5

Ich habe eine Lösung in Visual Studio Express, der wie folgt aussieht:Warum kopiert "Copy if newer" eine Datei nicht, wenn die Datei aktualisiert wird?

Die LogicSchema Klasse in C#, die eine bestimmte XML-Datei zur Laufzeit analysieren wird. Hier finden Sie in der main Methode von Program.cs:

LogicSchema ls = new LogicSchema(
    XDocument.Load(
     "schemas\\C#Schema.xml", 
     LoadOptions.PreserveWhitespace)); 

ich einen Ordner in meiner Lösung erstellt namens „Schemata“ die XML-Datei zu speichern und die Build Action auf Inhalt und den „Copy to Output Directory“ gesetzt Wert zu sein Kopieren, wenn neuer.

Meine Erwartung ist, dass, wenn Sie die Datei im Editor öffnen, eine Änderung vornehmen und speichern, wird die aktualisierte Version der XML-Datei in das Ausgabeverzeichnis (in diesem Fall bin \ debug) kopiert, wenn ich F5 drücke . Die aktualisierte Datei wird jedoch nicht in das Ausgabeverzeichnis kopiert, wenn ich nicht Rebuild auswähle. Regulär Build funktioniert nicht.

Was muss ich ändern, damit beim Drücken von F5 die Datei in das Ausgabeverzeichnis kopiert wird, wenn sie aktualisiert wurde?

Antwort

2

Haben Sie versucht, die Build-Aktion auf None zu setzen?

+0

danke für den Vorschlag, aber das scheint nicht zu funktionieren. –

+0

Ich habe das gleiche Szenario in VS2010 Beta 2 versucht und es funktioniert. Scheint wie ein Fehler in der Express-Ausgabe. – Ikaso

2

Es scheint auch Team System in Visual Studio 2008 zu arbeiten - spezifische Expression Ausgabe sein muss, so Repro nicht ...

OK, war meine ursprüngliche Vermutung nicht wahr - es geht um XML Datei befindet sich in der referenzierten Bibliothek. Kann es jetzt wiederholen.

Ich denke, der natürlichste Weg wäre, die XML als Ressource einzubetten und dann mit GetManifestResourceStream() zu lesen. Auf diese Weise würde die XML-Datei Ihrer DLL folgen, während Sie sie referenzieren, ohne sie separat zu kopieren, auch wenn Sie die DLL direkt und nicht über die Projektreferenz referenzieren.

... oder könnten Sie Pre-Build-Event verwenden? (Projekteigenschaften - Build-Ereignisse):

Ich würde denken, es wird immer ausgeführt, auch wenn VS denkt, dass keine Quelldateien geändert haben. Zumindest in voller VS2008 ist dies der Fall - nur getestet.

+0

Es könnte etwas damit zu tun haben, dass der "schemas" -Ordner Teil von * LogicParser * ist, während Program.cs, die Klasse, von der 'LogicSchema' instanziiert wird, in * LogicParser.ConsoleApp * liegt. –

+0

True: Ich war zu faul, die separate Klassenbibliothek zu erstellen, als ich das getestet habe. Habe es jetzt gemacht und es passiert auch in der Vollversion von Visual Studio. Also nicht Expression edition specific. Ich nehme an, Ihre Optionen sind, das Pre-Build-Ereignis mit $ (SolutionDir) hinzuzufügen oder dann das XML als Ressource einzubetten und es mit GetManifestResourceStream() zu lesen. Ich denke, das letztere ist besser - wenn Sie eine DLL erstellen, wäre es schöner, wenn Sie es verwenden können, indem Sie darauf verweisen, ohne andere (XML) Dateien hinzuzufügen. – Ope

Verwandte Themen