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

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

编辑:使用赛义德的答案,我创建了一个.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上写了一篇详细的博客文章,但是这里是重点:

<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中进行了转换以向config添加一个值,则在第一次添加该值时一切正常,但是在下次运行/调试您的应用程序时,它将再次添加。因此,最好避免这种情况。

关于asp.net - 使Web.config转换在本地工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3613714/

10-17 02:07