visual-studio-2010 - 在本地运行/调试时如何使用 Visual Studio 2010 配置转换?

标签 visual-studio-2010 configuration web-config

在我工作的团队中,我们有一个大型产品,其中包含许多 WCF Web 服务和一些使用这些服务的网站。我们即将升级到 VS 2010,我正在考虑是否应该开始使用 VS 2010 中的新配置转换功能。

我们有几个不同的环境,它们需要不同的 web.configs(数据库连接字符串、WCF 地址等)。通常在调试诸如 Web 前端之类的高级内容时,将其配置为直接与 TEST 或 QA 后端/数据库连接很有用。在每个开发人员的本地机器上,IIS 被直接配置到每个 WCF/web 项目的源文件夹,当在本地运行时,只需按 Ctrl-Shift-B 或 F5 即可调试某些内容。
有人会认为可以使用 TEST 或 QA 作为配置模式构建/F5 并获得 TEST/QA 配置,但我不知道如何。是不是不支持,或者我们可能需要改变我们处理事物的方式?

我们的另一个选择是使用简单的替换脚本作为预构建事件,根据配置模式从模板和 key 文件创建 web.config。使用这种方法,如果您在 TEST 中编译,您将获得 TEST 配置,等等,但是当 Visual Studio 中内置了一个函数时,推出我们自己的解决方案感觉有点糟糕。

最佳答案

您可以使用 .csproj 文件中提供的 BeforeBuild 和 AfterBuild 目标来实现您正在寻找的效果。 VS.NET IDE 将在执行 Build 或 Rebuild 时执行这些目标,因此您可以使用它们来执行 web.config 转换。由于您需要进行 web.config 转换,然后覆盖实际的 web.config 文件,因此您需要依赖一个名为 web.default.config 的新文件来存储基本的 web.config 数据。

我在一个测试项目中尝试了这个,这里是我对 .csproj 文件所做的更改:

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<ProjectExtensions>
...
</ProjectExtensions>
<Target Name="BeforeBuild">
    <Copy SourceFiles="$(ProjectDir)web.default.config" DestinationFiles="$(ProjectDir)web.config" />
</Target>
<Target Name="AfterBuild" Condition="$(FirstRun) != 'false'">
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="TransformWebConfig" Properties="FirstRun=false;" />
    <Sleep Milliseconds="2000" />
    <Copy SourceFiles="$(ProjectDir)obj\$(ConfigurationName)\TransformWebConfig\transformed\web.config"
        DestinationFiles="$(ProjectDir)web.config" />
</Target>

我必须手动将这些添加到 .csproj 文件(我使用 Notepad++)。据我所知,无法通过 VS.NET IDE 添加这些指令。您需要在 AfterBuild 上提供条件以防止循环引用,因为对 MSBuild 的调用将重新运行构建以生成 web.config 转换。

基本上我们正在做的是在我们开始构建之前将 web.default.config 文件(我们的基本模板)复制到现有的 web.config 上,然后我们使用 MSBuild 为我们正在构建的任何配置生成一个 web.config .转换完成后,我们使用 Copy 任务获取转换后的文件并将其复制到 web 根目录中的 web.config 文件。我偶尔遇到的一个问题是在转换完成后尝试覆盖 web.config 时出现文件使用错误。在 MSBuild 任务解决该问题后添加 sleep 任务(来自 MSBuildCommunityTasks )。

我只使用内置的 ASP.NET 服务器测试了这种方法,而不是 IIS,所以 YMMV 但我觉得这是一个可行的解决方案。

FirstRun 的想法来自于这个 post .

关于visual-studio-2010 - 在本地运行/调试时如何使用 Visual Studio 2010 配置转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3422289/

相关文章:

c# - 如何在程序集中找到实例化类 X 对象的所有方法?

c++ - 如何在 cmake 生成的 visual studio 项目中包含目录?

asp.net - 将 dotless 添加到我的本地网站后出现 HTTP 错误 500.23

java - 从 servlet 运行 C++ exe

c# - 当范围很大时,VSTO 4 & C# NamedRange.RefersToRange 抛出 Com 异常

json - Unix命令行JSON解析器?

asp.net - 如何在 ASP.NET 上上传 10gb 文件

c# - 如何从 web.config 添加和访问连接字符串

visual-studio-2010 - 如何创建 T4 模板并在我在 visual studio 中添加新项目时显示它?

visual-studio - Visual Studio : Single solution or many solutions?