我想上网.配置转换在本地工作,但显然转换只在进行部署时发生.

有没有人知道一种方法可以运行msbuild目标"TransformWebConfig",而不必执行"重建"过程,还可以指定和输出目录,在其中输出转换后的web.配置?

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"目录中.我只是把它复制过来覆盖我的项目的网页.最后,删除"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.prod.config.

您提到的一件事是,在运行应用程序时能够在本地进行转换.之所以我们只在包/发布上执行转换,是因为如果我们转换了web.配置自己,然后下次在web上调试应用程序时.配置再次被转换.举个例子,如果在你的网站上.调试.config你有向config添加值的转换,第一次添加时一切正常,但下次运行/调试应用程序时,它会再次添加.所以最好避免这种情况.

Asp.net相关问答推荐

禁用托管优化并重新启动调试实际上在 Visual Studio 中更改了哪些设置?

由于 Blazor Change Detection API,组件重新渲染被跳过.如何避免?

逐步 ASP.NET 自动构建/部署

C# ASP.NET Core Serilog 添加类名和方法到日志(log)

Azure 自定义控制器/API .Net 后端

.NET 站点如何隐藏其文件的 .aspx 扩展名?

如何从 web.config 中读取系统值并在 ASP.NET MVC C# 方法中使用

使用 Lucene.NET 索引 .PDF、.XLS、.DOC、.PPT

AddDefaultTokenProviders:它是什么以及如何使用那些默认提供者?

ASP.NET Core 2.0 为同一端点结合了 Cookie 和承载授权

从 IFrame 重定向父页面

如何获得 System.Diagnostics.Process 的输出?

禁用 web.config 继承?

elmah:没有 HttpContext 的异常?

在 ASP.NET MVC 中获取服务器机器名称?

DateTime.Parse 和 Convert.ToDateTime 之间有什么区别?

在 Visual Studio 2013 中更改项目端口号

使用 jQuery 从 asp:RadioButtonList 读取选定的值

如何在 ASP.NET 响应中传递大文件?

禁用文本框的模型绑定