使用Visual Studio的web.config转换进行debugging

可能重复:
如何在内置的visual studiodebugging器服务器中使用Web.debug.config?

我想使用可以正常工作的Web.config转换来进行debugging。

当我发布Web应用程序时,Visual Studio会根据我的currenctbuildconfiguration自动转换Web.config。 当我开始debugging时,如何告诉Visual Studio执行相同的操作? 在debugging开始时,只需使用默认的Web.config而不进行转换。

任何想法?

好了,了解到web.debug.configweb.release.config仅用于打包/发布。 我想出了一个方法来启用你正在做的事情。 我在http://sedodream.com/2010/10/21/ASPNETWebProjectsWebdebugconfigWebreleaseconfig.aspx上发表了博客。; 这是总结。

现在让我们看看我们如何启用提问者想要做的事情。

回顾一下,当他构build一个特定的configuration时,他希望将一个特定的转换应用到web.config 。 所以显然你不想维护一个web.config文件,因为它将被覆盖。

所以我们需要做的是创build一个新的文件web.template.config ,它只是web.config一个副本。 然后只需使用Windows资源pipe理器删除web.config (不要使用Visual Studio删除,因为我们不想从项目中删除它)。

注意:如果您正在使用集成到Visual Studio中的源代码pipe理提供程序,则可能需要从源代码pipe理中删除web.config。

此外,我们不想使用web.debug.configweb.release.config因为它们在Web发布pipe道中已经有了一个明确的angular色,所以我们不想打扰它。 所以相反,我们将创build两个新的文件,在项目和web.template.configweb.dev.debug.configweb.dev.release.config相同的文件夹中。

其思想是,这些将是从Visual Studiodebugging或运行应用程序时应用的转换。 现在我们需要挂钩到构build/包/发布过程中来完成这一切。 使用Web应用程序项目(WAP)有一个可扩展性,您可以使用名称{ProjectName}.wpp.targets{ProjectName}{ProjectName}名称的同一文件夹中创build项目文件。 如果此文件与WAP中的文件夹在同一个文件夹中,则会自动将其导入到项目文件中。 所以我创build了这个文件。 我已经放置了以下内容:

 <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- Make sure web.config will be there even for package/publish --> <Target Name="CopyWebTemplateConfig" BeforeTargets="Build"> <Copy SourceFiles="web.template.config" DestinationFiles="web.config"/> </Target> <PropertyGroup> <PrepareForRunDependsOn> $(PrepareForRunDependsOn); UpdateWebConfigBeforeRun; </PrepareForRunDependsOn> </PropertyGroup> <!-- This target will run right before you run your app in Visual Studio --> <Target Name="UpdateWebConfigBeforeRun"> <Message Text="Configuration: $(Configuration): web.dev.$(Configuration).config"/> <TransformXml Source="web.template.config" Transform="web.dev.$(Configuration).config" Destination="web.config" /> </Target> <!-- Exclude the config template files from the created package --> <Target Name="ExcludeCustomConfigTransformFiles" BeforeTargets="ExcludeFilesFromPackage"> <ItemGroup> <ExcludeFromPackageFiles Include="web.template.config;web.dev.*.config"/> </ItemGroup> <Message Text="ExcludeFromPackageFiles: @(ExcludeFromPackageFiles)" Importance="high"/> </Target> </Project> 

让我稍微解释一下。 我已经创build了CopyWebTemplateConfig目标,它将始终将web.template.config复制到构build的web.config ,即使您没有在Visual Studio中debugging应用程序。

这是需要的,因为我们仍然需要支持Visual Studio的包/发布过程。 然后我扩展了属性PrepareForRunDependsOn以包含UpdateWebConfigBeforeRun目标。 此属性用于标识在从Visual Studio运行任何托pipe项目之前需要执行的目标列表。

在这个目标中,我使用TransformXml任务来转换web.template.config ,使用正确的web.dev.***.config文件。 之后,您的应用程序将启动使用正确的web.config基于您的构buildconfiguration。 之后,我有另一个目标ExcludeCustomConfigTransformsFiles ,我通过属性BeforeTargets=”ExcludeFilesFromPackage”注入到包/发布过程中。 这是需要的,因为我们不希望这些文件被包含在应用程序打包或发布时。 所以这就是所有这一切。

为了解释这个场景中的包/发布过程。 在打包/发布web.debug.configweb.release.config ,依赖于构buildconfiguration,仍将使用。 但最终它正在转换的文件是web.template.config ,因此您可能需要根据您在该文件中的内容进行调整。 问题/评论?

安德鲁在正确的道路上。 当你使用这个function的时候,它是如何被使用的。

web.config这是开发人员在本地使用的configuration文件。 理想情况下,你应该得到这个标准化。 例如,你可以使用本地主机的数据库string,什么不是。 您应该努力在开发机器上工作而不用更改。

web.debug.config这是将应用程序发布到开发阶段环境时应用的转换。 这将更改目标环境所需的web.config。

web.release.config这是将应用程序发布到“生产”环境时应用的转换。 显然,根据您的应用程序/团队,您必须小心密码。

转换当前正在运行的web.config的问题是,转换可以对web.config执行破坏性操作。 例如,它可以删除一个属性,删除元素等。

您可以使用“默认”web.config作为开发/debugging版本,然后web.release.config当然会继续作为发布版本,因为它在发布时会应用转换。

在你的debuggingconfiguration中,添加一个构build后的步骤,并用它来replace/转换你的web.config

虽然我同意最简单的方法通常是最好的,但是我可以很容易地想象一个情况,在这种情况下,您想要将IDE连接到testing数据库而不是开发数据库。 虽然您可以在默认的web.config文件中指定开发连接string,但是如果您有一个Web.Test.config文件,那么当您将构buildconfiguration交换到“Test”时,您将自动获得新的设置而仍然在你的IDE。

历史的select是为另一组连接string注释掉,但是这些新的configuration转换带来了最终把这个丑恶实践的核心放在一边的希望。 尽pipe一个用于开发的默认文件和一个用于发布的转换可能在很大程度上工作,但在我看来,添加一个构build后步骤来转换web.config文件是更完整的答案。

-M