使 Web.config 转换在本地工作

2024-05-01

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

有谁知道一种方法来运行 msbuild 目标“TransformWebConfig”,而不需要经历“重建”过程,并指定和输出目录来吐出转换后的 web.config?

EDIT:使用 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

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


如果您想在不使用 Web 发布管道的情况下转换配置文件,那么您只需手动使用 TransformXml 任务即可。我已经在以下位置写了一篇详细的博客文章:http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx 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。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 Web.config 转换在本地工作 的相关文章

随机推荐