Visual studio 在处理多个发布目标时,如何处理不同实例的多个web.config转换?

Visual studio 在处理多个发布目标时,如何处理不同实例的多个web.config转换?,visual-studio,visual-studio-2010,deployment,web-config,Visual Studio,Visual Studio 2010,Deployment,Web Config,我有一个Asp.NET MVC站点,可以管理多个实例。每个实例都使用自己的数据库,但代码库都是相同的。为了实现这一点,我有几个构建配置与匹配的web.config转换,因此当我发布时,它不会使用我的开发数据库,而是使用该站点实例的特定数据库 今天我去发布其中一个站点的更新时,出现了这个问题。我忘了更改构建配置,所以我发布到站点A时使用了一个web.config转换,该转换是针对站点B的,随后造成了混乱和混乱 是否有任何方法可以指定特定的发布目标仅用于特定的生成配置 或者,有没有更好的方法来处理这

我有一个Asp.NET MVC站点,可以管理多个实例。每个实例都使用自己的数据库,但代码库都是相同的。为了实现这一点,我有几个构建配置与匹配的web.config转换,因此当我发布时,它不会使用我的开发数据库,而是使用该站点实例的特定数据库

今天我去发布其中一个站点的更新时,出现了这个问题。我忘了更改构建配置,所以我发布到站点A时使用了一个web.config转换,该转换是针对站点B的,随后造成了混乱和混乱

是否有任何方法可以指定特定的发布目标仅用于特定的生成配置


或者,有没有更好的方法来处理这种情况,而不是在构建配置之间折腾?

使用它,您不仅可以部署应用程序和web应用程序,还可以逐个实例管理参数或文件覆盖。我只在tomcat wars中使用过它,但它与语言或平台无关,因此我认为将其配置为与ASP.NET一起使用应该很简单。

处理此类问题的一种方法,我不确定它是否最好,但它是一种方法,是在更高级别的web.config或machine.config文件中设置某些配置值,这些文件始终驻留在相关计算机上

然后确保项目文件不会覆盖这些配置值

如果您这样做,这里有一些注意事项

  • 如果要对这些值进行源代码管理,可能会更困难 这样(这可能是赞成或反对,取决于你的 环境)
  • 如果其他虚拟站点位于同一台计算机上并使用相同的 配置值,这可能会影响所有配置值,如果有多个配置值 站点确实使用相同的配置值,并在 来源将改变他们所有(再次,可能是赞成或反对) (视情况而定)
  • 如果值有问题,则很难确定 确定问题的位置或原因
  • 在您的组织中,访问machine.config可能很困难 或与您的主机提供商联系,具体取决于您的访问/安全性 特权,并且不可能总是将web.config放在 高于您的应用程序的级别
  • 显然,这里的好处是,您可以在每台机器上配置不同的值,并且只要web.config中没有设置这些值(这可能会导致错误),您就不必担心编译不同的版本

    我相信VisualStudio2010有一种方法可以为不同的构建类型设置不同的配置文件,但这听起来很像您已经在做的事情,因此忘记以正确的方式构建仍然可能会得到类似的结果

    如果TFS Build对您可用,您可以尝试设置与TFS Build之类的东西的持续集成,在这种情况下,为prod构建的内容可以设置为始终以某种方式工作,并且始终从正确的构建类型中提取


    希望这里有帮助。

    也许您可以选择一种解决方案,不依赖于web应用程序的“发布”对话框,该对话框要求您每次都进行正确的设置,而是使用类似于自动命令行的解决方案(批处理文件、您自己的msbuild目标或类似CStroliaDavis的生成服务器)[cruisecontrol、tfs、teamcity])

    您只需从创建包的命令行调用“package”目标:

    msbuild MyWebProject.csproj /t:Package /P:Configuration=Release;DeployIisAppPath="Default Web Site/Main/MyWebProject";PackageLocation="F:\MyWebProjectDeploy.zip"
    
    这还会创建一个*.cmd文件,以便您可以像这样部署它:

    F:\MyWebProjectDeploy.deploy.cmd /Y -allowUntrusted /M:http://webserver/MSDeployAgentService /U:Administrator /P:"Secret"
    

    您可以向解决方案中添加一个自定义的*.msbuild文件来执行这些操作,或者最简单的方法是在“工具”->“外部工具”中添加一个命令。

    虽然在奖金结束之前我没有时间来测试这一点,但我最喜欢您的想法。这似乎是最简单、最灵活的方法。