2009-07-29 5 views
2

J'ai deux projets dans une solution Visual Studio. J'ai besoin d'un paramètre d'application dans l'un d'entre eux pour être le numéro de version de l'assemblage de l'autre projet.Comment obtenir la version d'un autre projet depuis app.config?

Je pensais que d'ajouter à mon app.config de project1 de quelque chose comme:

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

mais évidemment ce code ne fonctionne pas

je pourrais changer la valeur chaque fois que je compile manuellement une nouvelle version .. mais ... tu sais ... on oublie. Jusqu'à ce que vous arriviez à Visual Studio 2010, il n'y a pas de possibilité de remplacer dans un fichier de configuration.

Répondre

1

Ensuite, il est seulement là pour web.config.

+0

En fait, j'ai entendu de l'équipe VS 2010 que le sous-système de substitution devrait être disponible pour toutes les configs - pas seulement web.config –

+0

Cool! Je ne le savais pas. –

-1

Vous pouvez ajouter app.config pour project1 à project2 en tant que référence de fichier. Il suffit d'ajouter app.config en tant qu'élément existant à project2 mais au lieu de cliquer sur «Ajouter», cliquez sur la petite flèche vers le bas sur le bouton «Ajouter» pour faire apparaître une liste d'options et sélectionnez «Ajouter en tant que lien» dans cette liste. De cette façon, un seul fichier app.config sera partagé par project1 et project2. Notez que cela provoquera une dépendance de project2 sur l'emplacement du fichier app.config. Vous devez donc faire attention si vous voulez utiliser project2 dans une autre solution qui ne nécessite pas project1.

Si vous ne souhaitez pas partager l'ensemble du fichier app.config entre deux projets, vous pouvez extraire les paramètres de l'application dans un fichier de configuration externe et le référencer depuis vos fichiers app.config via configSource. Cependant, si je ne me trompe pas, le fichier de configuration externe doit se trouver dans le même répertoire ou dans le sous-répertoire du fichier app.config. Cela peut donc nécessiter une étape de préconfiguration dans project2 ou les deux pour copier ce fichier externe à partir d'un emplacement partagé ou d'un projet1.

+0

Nevermind. Je vois ce que tu veux dire après ton montage. Je ne pense pas que le framework de configuration .NET tel qu'il existe permette ce genre d'expressions comme dans les fichiers de configuration. Même si c'est le cas, ce que vous voulez semble être quelque chose que vous auriez encore à écrire du code personnalisé pour le faire. –

1

Nous utilisons NAnt pour construire nos applications. Cela peut être excessif pour votre problème, surtout si vous n'utilisez pas déjà NAnt pour créer votre application. Mais il existe une tâche nant appelée xmlpoke qui peut être utilisée pour définir des valeurs dans n'importe quel fichier xml au moment de la construction. .: partie de par exemple mon script de construction de NAnt ressemble à ceci:

<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> 

Vous pouvez obtenir plus d'informations sur la page de documentation NAnt xmlpoke.