我想让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
您还可以在工具栏上添加一个按钮来运行此批处理和/或指定要执行的快捷键。
答案 0 :(得分: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中有转换为配置添加值,则第一次添加该值时一切正常,但下次运行/调试您的应用时,它将再次添加。所以最好避免这种情况。
答案 1 :(得分:5)
如果您使用的是Visual Studio 2015,则可以右键单击所需环境的转换,然后单击&#34;查看预览&#34; ...然后它将生成转换,您可以将其复制并粘贴到正常的Web.config文件中以进行调试。只是不承诺!
如果您使用的是Visual Studio 2013,则可以安装SlowCheetah - XML Transforms扩展