33 votes

Pourquoi certaines transformations Web.config sont-elles jetées dans SetParameters.xml alors que d'autres ne le sont pas?

J'ai été à l'aide de config transforme en VS2010 un peu ces derniers temps mais je suis confus quant à pourquoi certaines transformations sont appliquées directement sur le Web.config dans le package, mais d'autres sont stockés à l'encontre d'un jeton dans SetParameters.xml ensuite appliquée sur publier.

Par exemple, prendre un site Web.config avec la chaîne de connexion suivante et app paramètre:

<connectionStrings>
  <add name="AutoDeployDb" connectionString="Data Source=(local);Initial Catalog=AutoDeploy;User ID=AutoDeployUser;Password=Passw0rd"/>
</connectionStrings>
<appSettings>
  <add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
</appSettings>

Alors voici la configuration correspondante de transformation pour la génération en cours de configuration:

<connectionStrings>
  <add xdt:Transform="Replace" xdt:Locator="Match(name)" name="AutoDeployDb" connectionString="Data Source=MyDevServer;Initial Catalog=AutoDeploy;User ID=AutoDeployUser;Password=s*#@Kdsl" />
</connectionStrings>
<appSettings>
  <add xdt:Transform="Replace" xdt:Locator="Match(key)" key="ChartImageHandler" value="storage=file;timeout=20;dir=d:\inetpub\AutoDeploy\TempImageFiles\"/>
</appSettings>

Ce sont les deux "Remplacer" les transformations et les autres que l'un étant une chaîne de connexion correspondants sur "nom" et l'autre étant un des paramètres de l'application d'appariement sur "clé", à mes yeux, elles sont identiques.

Maintenant, regardez à l'intérieur de la SetParameters.xml fichier dans la résultante paquet et seulement la chaîne de connexion a un setParameter nœud. Dans le Web.config de la PackagTmp dossier, l'application paramètre de transformation a déjà été appliquée lors de la chaîne de connexion a un "$(ReplacableToken_AutoDeployDb-Web.config Connexion String_0)" la valeur qui est appliqué uniquement lorsque le programme est déployé.

Pourquoi est-ce? Est-il quelque chose de spécifique pour les chaînes de connexion (ou, à l'inverse, pour les paramètres de l'application)? J'apprécie la justification de cette approche, je ne suis pas clair sur pourquoi il est appliqué à certaines situations et pas dans d'autres.

Quelqu'un peut-il éclairer sur ce point?

37voto

Sayed Ibrahim Hashimi Points 25707

En fait, cela n'a rien à voir avec la config transforme. Je viens de poster une très détaillé blog à http://sedodream.com/2010/11/11/ASPNETWebApplicationPublishPackageTokenizingParameters.aspx. Mais quelques infos ici pour vous.

Dans la Publication Web Pipeline (WPP) nous nous occupons de chaînes de connexion en utilisant des objets spéciaux. Nous allons créer automatiquement les paramètres pour vous, pour toutes les chaînes de connexion. C'est parce que dans de nombreux cas, lorsque vous déployez votre application dont vous souhaitez modifier les chaînes de connexion. Nous n'avons pas de créer automatiquement les paramètres appSettting valeur. Maintenant, revenons à votre question, pourquoi nous faire marquer des chaînes de connexion? Nous sommes vraiment en train de faire ce pour s'assurer que vous ne manquez pas de réglage de la valeur, puis accidentellement votre demande de mise à jour dans le mauvais DB. Nous ne vous aider en créant ces paramètres pour vous. Aussi, vous pouvez désactiver ce comportement, si vous le souhaitez. Vous pouvez définir la propriété MSBuild AutoParameterizationWebConfigConnectionstrings à false.

1voto

David Hu Points 11

Concernant le déploiement, il y a une différence significative entre eux. Lorsque vous importez des packages web de IIS:

  • Les chaînes de connexion sera automatiquement inclus dans le dialogue de l'assistant pour plus de paramétrage.
  • Les paramètres de l'application ne sera pas là par défaut. Si vous voulez vraiment le faire, veuillez suivre les étapes dans "Paramétrage Personnalisé - paramètres de l'Application dans le web.fichier de config" de la section de Configuration des Paramètres Web Package de Déploiement

La différenciation crée une responsabilité frontière entre dev et ops. D'un côté, vous mettez les paramètres de la cible de l'environnement (base de données, le cache, AWS key/secret, etc.) dans les chaînes de connexion, ops besoin de prendre soin de. D'autre part, vous mettez de la pertinence des options dans les réglages de l'application de la section afin de ops du fardeau sur des produits spécifiques et la logique métier peut être soulagée.

Dans mon entreprise, un ops mec est souvent responsable de plusieurs produits. Vous ne pouvez vraiment pas besoin de connaître autant de connaissances sur les produits que vous. La moindre chose qu'ils ont besoin de prêter attention, le plus heureux de la vie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X