2016-04-25 5 views
0

VS Publier fonctionne, mais pas MSBuild. Je ne suis pas un expert en MSBuild, mais je vais passer par le processus.Web.config Transforme

Après ce site,

https://msdn.microsoft.com/en-us/vs2010trainingcourse_webdevelopment_topic4.aspx

, j'ai passé par étapes 1-4. Lorsque j'ai lancé "Publier" dans VS 2015, j'ai choisi "système de fichiers" pour la méthode, et le fichier web.config a été modifié en fonction de la "Configuration" choisie, pas de problème.

Cependant, lors de l'exécution MSBuild,

C:\Program Files (x86)\MSBuild\14.0\Bin>msbuild.exe "C:\pathToProject\project.sln" /p:Configuration=XXXX /p:OutputPath="C:\pathToOutputFolder" 

ne fonctionne pas. Le web.config a fait PAS changement.

Ai-je oublié autre chose?

Répondre

0

Il existe une tâche MSBuild appelée TransformXml que l'élément de menu Publier est en cours d'exécution, mais qui n'est pas exécuté à partir de la ligne de commande. Cela ne fait pas partie d'un fichier de projet, et vous devez l'exécuter manuellement.

J'ai un serveur de build qui exécute un script MSBuild personnalisé pour déployer un site, et il exécute la transformation avec ceci:

<!-- Transform the profile-specific .config file into Web.config, placing result in staging folder --> 
<Target Name="TransformWebConfig" Condition=" '$(WebsiteTransformFile)' != '' "> 
    <Error Condition="!Exists('$(WebsiteTransformFile)')" Text="Web configuration file $(WebsiteTransformFile) not found." /> 
    <Message Text="Transforming Web.config with $(WebsiteTransformFile)" /> 
    <TransformXml Source="Web.config" 
      Transform="$(WebsiteTransformfile)" 
      Destination="Web.transformed.config" /> 
    <Copy SourceFiles="Web.transformed.config" DestinationFiles="Web.config" /> 
    <Delete Files="Web.transformed.config" /> 
</Target> 

La propriété $(WebsiteTransformFile) est ma propriété, définie ailleurs dans le fichier, que correspond au fichier de configuration, comme Web.release.config.

Vous pouvez ajouter cela à votre fichier .csproj ou le placer dans un fichier séparé et l'exécuter manuellement. Il peut être préférable de le faire manuellement, de sorte que lorsque vous appuyez sur F5 pour exécuter localement, vous utiliserez votre web.config non transformé, et non la version transformée que vous devez déployer sur un serveur.