使Web.config转换在本地工作

问题描述 投票:37回答:2

我想让web.config转换在本地工作,但显然只在进行部署时才会发生转换。

有没有人知道如何运行msbuild目标“TransformWebConfig”而不通过“rebuild”进程,还指定并输出目录在哪里吐出转换后的web.config?

编辑:使用Sayed的答案,我创建了一个.bat文件来为我执行任务:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Msbuild.exe "D:\Demo\Transformation.proj" /t:TransformWebConfig 

copy /Y  "D:\Demo\Web.config" "D:\MyProject\Web.config" 

del ""D:\Demo\Web.config"

“Transformation.proj”是Sayed的代码片段的副本,在下面的答案中。只需指定转换的源,目标和目标。新文件(在本例中为已转换的“web.config”)将位于“D:\ Demo”目录中。我只是将其复制以覆盖我的项目的web.config,最后,删除“demo”文件夹中生成的文件。

另外,我创建了一个宏来运行这个批处理文件并为我执行转换:

Public Module DoTransform
    Sub RunTransformBatchFile()
        Try
          Process.Start("D:\Demo\RunTransform.bat")
        Catch ex As System.Exception
            MsgBox(ex.Message)
        End Try
    End Sub
End Module

您还可以在工具栏上添加一个按钮来运行此批处理和/或指定要执行的快捷键。

asp.net visual-studio-2010 web-config msdeploy web-deployment
2个回答
36
投票

如果要在不使用Web Publishing Pipeline的情况下转换配置文件,则只需手动使用TransformXml任务。我在http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx上写了一篇关于此的详细博客文章,但这里有高亮的灯光:

<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="TransformXml"
             AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

    <Target Name="Demo">
        <TransformXml Source="app.config"
                      Transform="Transform.xml"
                      Destination="app.prod.config"/>
    </Target>
</Project>

在这里,我使用transform.xml文件手动转换app.config文件,目标文件是app.prod.config。

您提到的一件事是在运行应用程序时能够在本地进行转换。我们只对包/发布执行转换的原因是因为如果我们转换了web.config本身,那么下次调试应用程序时,web.config会再次转换。因此,例如,如果在您的web.debug.config中有转换为配置添加值,则第一次添加该值时一切正常,但下次运行/调试您的应用时,它将再次添加。所以最好避免这种情况。


5
投票

如果您使用的是Visual Studio 2015,则可以右键单击所需环境的转换,然后单击“查看预览”...然后它将生成转换,您可以将其复制并粘贴到正常的Web.config中。用于调试目的的文件。只是不要提交它!

如果您使用的是Visual Studio 2013,则可以安装SlowCheetah - XML Transforms扩展

© www.soinside.com 2019 - 2024. All rights reserved.