是否可以编写仅在开发环境中执行的 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 来提供“这个或那个”和“非调试”代码: