【问题标题】:Execute code only on localhost (when developing)仅在本地主机上执行代码(开发时)
【发布时间】:2013-06-02 08:51:54
【问题描述】:

我做 MVC 应用程序,我有几行代码我只想在开发时执行,而另一个类似的代码部分在部署应用程序时执行。 例如,我有将邮件发送到某个地址的控制器操作,但我希望在部署和测试时该地址不同。

总是很难改变它,而且我经常忘记这样做。

【问题讨论】:

  • 在您的配置文件中放置一个标志,并将标志 A 用于本地主机/开发机器,将标志 B 用于部署版本。在运行时检查标志以确定邮件目的地。

标签: c# asp.net-mvc


【解决方案1】:

Visual Studio 提供了多种方法来执行此操作,您要使用哪种方法取决于您到底想要做什么。

例如,您可以使用构建目标来指定您想要的构建类型,Release 和 Debug 很常见,但您也可以创建其他。然后,您可以在代码中添加 #if 预处理器语句,以根据选择的构建来执行操作。

听起来像您想要的另一种方法是在您的应用程序或 web.config 中使用应用程序设置。然后使用构建转换根据构建类型转换配置(例如,您将看到 Web.Debug.config 或 Web.Release.config。当您发布站点时,Visual Studio 会自动将这些转换应用于您的配置文件并将应用设置更改为该构建类型所需的任何内容。

因此,使用您的示例,您将在 Web.config 中包含以下内容:

<appSettings>
    <add key="notifyAddress" value="debug@foo.com" />
</appSettings>

然后,在你的 Web.Release.config 中你有这个转换:

<appSettings>
    <add key="notifyAddress" value="release@foo.com" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</appSettings>

在您的代码中:

string emailAddress = ConfigurationManager.AppSettings["notifyAddress"];

现在,当您发布网站时,emailAddress 将自动包含 release@foo.com。

【讨论】:

    【解决方案2】:

    看看这是否有帮助:https://stackoverflow.com/a/4597270/1043824。推荐的方式仍然是配置文件方式。

    在 Visual Studio 2010 中,Request.ServerVariables("SERVER_SOFTWARE") 将为开发服务器返回 Nothing (null),为我的 Win7 Pro IIS/VS2010 安装返回“Microsoft-IIS/7.5”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多