我们有这样一种情况,一群用户(我们不知道是哪些用户或有多少,可能是几十个)已经掌握了我们ASP的开发环境URL。. NET应用程序,并认为它是生产。
在过去,我们只是在dev的默认页面中重定向将它们发送到生产环境,但现在我们需要使用我们的dev环境进行开发。麻烦的是,如果我们取消重定向,用户最终会打电话来抱怨"数据错误"或"我的更改被覆盖了"等等。我们已经发送给那些我们知道正确URL的人,并指示他们使用它,但其中一些人正在复发(可能是因为他们有他们不想改变的书签)。
我想做的是有一些明显的视觉变化,可以跳到他们面前,他们不能错过告诉他们他们没有在正确的应用程序中。我的偏好是在开发中把屏幕变成亮绿色,并有一个在生产中不可见的链接,这将把他们带到生产中。
我的团队领导正在反击。首先,他说,只是看看浏览器中的URL应该足够好了(是的,正确的,将工作),然后他说,我们不能改变颜色,因为我们使用的是样式表,所以覆盖他们基于应用程序的配置文件中的设置(我们已经有)将是太多的工作。
我不知道足够的web开发来争论这一点(我的背景是Winforms),但我希望有人能指出我在正确的方向,找出如何使表单改变颜色,而不管什么值是在css文件。或者有另一个非常关注的视觉变化的建议,可以从配置设置控制。
我假设你使用的是ASP。Net Forms,而不是ASP。. Net MVC Razor Views.
在你的配置文件中,设置一个应用程序设置,声明应用程序运行的环境:
<appSettings>
<add key="Environment" value="DEV" />
</appSettings>
然后,您可以使用配置转换来更改每个环境的设置值。查看此链接了解其工作原理:https://msdn.microsoft.com/en-us/library/dd465318(v=vs.100).aspx
假设你希望应用程序中每个页面的背景颜色根据应用程序运行的环境而改变,那么在你的HTML中(我们在。master页面中有这个)添加一个服务器端调用helper函数,该函数将根据应用程序运行的环境设置CSS类:
<body class="<%= Helpers.GetDeploymentEnvironment()%>">
你还需要链接保存环境特定样式的environment .css文件:
<head>
<link href="~/css/Environment.css" rel="stylesheet" type="text/css" />
</head>
下面是一个帮助函数的例子,它从配置中检索环境设置(这是在VB中)。Net,如果你需要c#版本,请在下面评论,我会更新答案):
Public Shared Function GetDeploymentEnvironment() As String
Dim environmentSetting = GetAppSetting("Environment")
Return environmentSetting
End Function
Public Shared Function GetAppSetting(ByVal strConfigName As String) As String
If ConfigurationManager.AppSettings(strConfigName) IsNot Nothing Then
Return ConfigurationManager.AppSettings(strConfigName).ToString()
End If
Return String.Empty
End Function
environment .css文件和每个环境的样式
/* CSS Styling for deployment environment */
/* No background-color for PROD */
body.LOCAL {
background-color: #f6f66c; /* Yellow Local build */
}
body.DEV {
background-color: #ffe4e1; /* Misty Rose DEV */
}
body.TEST {
background-color: #e6e6fa; /* Lavender TEST */
}
最后,如果你想要一个链接出现在应用程序的所有页面的某个地方,但如果应用程序运行在生产环境中,则不需要,那么使用服务器端超链接并根据辅助函数的返回值在Page_Load方法中设置其可见性:
在你的。aspx:
<body class="<%= Helpers.GetDeploymentEnvironment()%>">
<asp:HyperLink ID="hypProduction" NavigateUrl="http://your.prod.server/page.aspx" runat="server"></asp:HyperLink>
</body>
在你的代码后面:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
hypProduction.Visible = Helpers.GetDeploymentEnvironment() = "PROD"
End Sub
但是我建议把"PROD"放在一些Constants.vb文件中,而不是依赖于一个'魔法字符串'。