2009-07-29 2 views
2

Ich habe zwei Projekte in einer Visual Studio-Lösung. Ich brauche eine Anwendungseinstellung in einer von ihnen, um die Versionsnummer der Assembly des anderen Projekts zu sein.Wie bekomme ich die Assembly-Version eines anderen Projekts von app.config?

Ich dachte an meine project1 der app.config etwas Zugabe wie:

<setting name="currentVersion" serializeAs="String"> 
    <value> 
    !(bind.project2.Assembly.FileVersion) 
    </value> 
</setting> 

aber offensichtlich dieser Code nicht

manuell jedes Mal

Ich konnte den Wert ändern ich eine neue Version kompilieren funktioniert .. aber ... weißt du ... man vergisst.

Antwort

1

Bis Sie zu Visual Studio 2010 gelangen, gibt es keine Möglichkeit, eine Konfigurationsdatei zu ersetzen. Dann ist es nur für web.config da.

+0

Eigentlich habe ich vom VS 2010 Team gehört, dass das Substitutions-Subsystem für alle Konfigurationen verfügbar sein sollte - nicht nur web.config –

+0

Cool! Das wusste ich nicht. –

-1

Sie können app2.config für project1 als Dateireferenz zu project2 hinzufügen. Fügen Sie einfach app.config als vorhandenes Element zu project2 hinzu, klicken Sie jedoch nicht auf "Hinzufügen", sondern auf den kleinen Abwärtspfeil auf "Hinzufügen", um eine Liste mit Optionen zu öffnen und "Als Verknüpfung hinzufügen" aus dieser Liste auszuwählen. Auf diese Weise wird eine einzige app.config-Datei von project1 und project2 gemeinsam genutzt. Beachten Sie, dass dies dazu führt, dass Projekt2 eine Abhängigkeit vom Speicherort der app.config-Datei übernimmt. Sie müssen also vorsichtig sein, wenn Sie project2 in einer anderen Lösung verwenden möchten, die project1 nicht benötigt.

Wenn Sie nicht die gesamte app.config zwischen zwei Projekten freigeben möchten, können Sie die Anwendungseinstellungen in eine externe Konfigurationsdatei extrahieren und in den app.config-Dateien über configSource referenzieren. Wenn ich mich jedoch nicht irre, muss sich die externe Konfigurationsdatei im selben Verzeichnis oder im Unterverzeichnis der Datei app.config befinden. Dies erfordert möglicherweise einen Pre-Build-Schritt in Projekt2 oder beides, um diese externe Datei von einem freigegebenen Speicherort oder Projekt1 zu kopieren.

+0

Vergiss es. Ich sehe, was du nach deinem Schnitt meinst. Ich glaube nicht, dass das .NET-Konfigurations-Framework, so wie es existiert, diese Art von Bindung wie Ausdrücke in Konfigurationsdateien erlaubt. Selbst wenn dies der Fall ist, scheint das, was Sie wollen, etwas zu sein, für das Sie noch benutzerdefinierten Code schreiben müssten, um es zu tun. –

1

Wir verwenden NAnt, um unsere Anwendungen zu erstellen. Dies kann für Ihr Problem ein Overkill sein, insbesondere wenn Sie NAnt nicht bereits zum Erstellen Ihrer App verwenden. Aber es gibt eine nant-Aufgabe namens xmlpoke, die verwendet werden kann, um Werte in einer beliebigen XML-Datei zum Zeitpunkt der Erstellung festzulegen. Z.B .: Teil meines NAnt Build-Skript sieht wie folgt aus:

<target name="updateconfig"> 
    <!-- Grab the mySvcSoap value from the already deployed 
     appropriate config file --> 
    <xmlpeek 
    file="${deployment.dir}/Config/appSettings.config" 
    xpath="/appSettings/add[@key = 'MyServiceSoap']/@value" 
    property="MySvcSoap"/> 
    <echo message="MyServiceSoap = ${MySvcSoap}"/> 
    <!-- Stick the peeked value into the web.config file system.serviceModel 
     configuration. --> 
    <xmlpoke 
    file="${deployment.dir}/web.config" 
    xpath="/configuration/system.serviceModel/client/endpoint[@name = 'MyServiceSoap']/@address" 
    value="${MySvcSoap}" /> 

</target> 

Sie können weitere Informationen aus der NAnt xmlpoke Dokumentationsseite bekommen.

Verwandte Themen