是否可以编写仅在开发环境中执行的 class?
Is it possible to write a class that only executes in DEVELOPMENT ENVIRONMENT?
在我的 startup.cs class 中,我检查它是否是 DEV 环境并且在我的 appsettings.json 和 appsettings.development.json 文件中有很多键值对.
但是我想封装一些只在 DEV 环境中运行的代码,当部署到 UAT、TEST 或 LIVE 时,代码不会部署。
如何实现?
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseMigrationsEndPoint();
}
else
{
app.UseHsts();
}
并有一个 class,因为这是我的 class 中的一个值,用于获取子域运行的 URL (这也是我的 IDENTITY 中角色的值数据库
private string SubDomain(HttpContext httpContext)
{
HttpRequest request = httpContext.Request;
string url = request.Headers["Host"];
string subDomainUrl = url.Replace("https://", "").Split('/')[0];
//我希望能够根据http://localhost:44312/?role=adminUsers获取我的域
//所以如果它是本地主机上的 运行 并且角色是管理员用户,这只会在本地执行,因为远程 URL 有 http://adminusers.mydomain.com
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<InjectMyClassHere>(); //My class or interface goes here
我希望这是清楚的。我怎样才能做到这一点?即让这个 class 只在 DEV 中执行而不部署在 UAT、TEST 或 LIVE 环境中
如果在
中包围只在开发环境中需要的代码
#if DEBUG
//code here
#endif
然后当调试模式(在 VS 的顶部)处于活动状态时,该代码将仅存在于编译后的代码中。当编译器在发布模式下运行时,编译器将逐字删除并丢弃指令之间的任何代码——就好像你在构建之前突出显示它并按下 Delete
Visual Studio 可以帮助您点亮 up/greying 代码,因为 is/not 处于活动状态:
看到上面设置了[Debug]模式,代码点亮:
现在看到[释放]模式设置在顶部。代码是灰色的,因为它已从编译中删除。还要注意现在有一个编译错误,因为 OnlyDebug 不存在:
如果你的 VS 不是这样的,检查项目属性。发布模式不要定义 DEBUG 常量,调试模式应该定义 DEBUG 常量:
当部署到生产环境时,您的代码当然不应使用调试构建模式来解决此问题..
脚注:您也可以输入 #else
,或者您可以使用 #if !DEBUG
来提供“这个或那个”和“非调试”代码:
在我的 startup.cs class 中,我检查它是否是 DEV 环境并且在我的 appsettings.json 和 appsettings.development.json 文件中有很多键值对.
但是我想封装一些只在 DEV 环境中运行的代码,当部署到 UAT、TEST 或 LIVE 时,代码不会部署。
如何实现?
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseMigrationsEndPoint();
}
else
{
app.UseHsts();
}
并有一个 class,因为这是我的 class 中的一个值,用于获取子域运行的 URL (这也是我的 IDENTITY 中角色的值数据库
private string SubDomain(HttpContext httpContext)
{
HttpRequest request = httpContext.Request;
string url = request.Headers["Host"];
string subDomainUrl = url.Replace("https://", "").Split('/')[0];
//我希望能够根据http://localhost:44312/?role=adminUsers获取我的域 //所以如果它是本地主机上的 运行 并且角色是管理员用户,这只会在本地执行,因为远程 URL 有 http://adminusers.mydomain.com
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<InjectMyClassHere>(); //My class or interface goes here
我希望这是清楚的。我怎样才能做到这一点?即让这个 class 只在 DEV 中执行而不部署在 UAT、TEST 或 LIVE 环境中
如果在
中包围只在开发环境中需要的代码#if DEBUG
//code here
#endif
然后当调试模式(在 VS 的顶部)处于活动状态时,该代码将仅存在于编译后的代码中。当编译器在发布模式下运行时,编译器将逐字删除并丢弃指令之间的任何代码——就好像你在构建之前突出显示它并按下 Delete
Visual Studio 可以帮助您点亮 up/greying 代码,因为 is/not 处于活动状态:
看到上面设置了[Debug]模式,代码点亮:
现在看到[释放]模式设置在顶部。代码是灰色的,因为它已从编译中删除。还要注意现在有一个编译错误,因为 OnlyDebug 不存在:
如果你的 VS 不是这样的,检查项目属性。发布模式不要定义 DEBUG 常量,调试模式应该定义 DEBUG 常量:
当部署到生产环境时,您的代码当然不应使用调试构建模式来解决此问题..
脚注:您也可以输入 #else
,或者您可以使用 #if !DEBUG
来提供“这个或那个”和“非调试”代码: