【问题标题】:Is it possible to write a class that only executes in DEVELOPMENT ENVIRONMENT?是否可以编写一个只在开发环境中执行的类?
【发布时间】:2021-12-12 19:06:28
【问题描述】:

在我的 startup.cs 类中,我检查它是否是 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();
        }

并且有一个类,因为这是我的类中的一个值,以获取子域运行的 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

我希望这很清楚。我怎样才能做到这一点?即让这个类只在 DEV 中执行,而不是在 UAT、TEST 或 LIVE 环境中部署

【问题讨论】:

标签: c# asp.net-identity asp.net-roles


【解决方案1】:

如果你只在开发环境中包含你想要的代码

#if DEBUG

//code here

#endif

然后,当调试模式(在 VS 顶部)处于活动状态时,该代码将仅存在于编译代码中。当编译在发布模式下运行时,编译器会从字面上切掉并丢弃指令之间的任何代码 - 就像您在构建之前突出显示它并按下 Delete 键一样

Visual Studio 通过点亮/灰显因此而处于活动状态/不活动状态的代码来帮助您:

见顶部设置了【调试】模式,代码亮了:

现在看到 [Release] 模式设置在顶部。代码是灰色的,因为它已从编译中删除。另请注意,现在出现编译错误,因为 OnlyDebug 不存在:

如果你的 VS 不这样,检查项目属性。发布模式喊不定义 DEBUG 常量,调试模式应该定义 DEBUG 常量:

当部署到生产环境时,您的代码当然不应该使用调试构建模式来解决这个问题..


脚注:你也可以输入#else,也可以使用#if !DEBUG提供“这个或那个”和“非调试”代码:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 2010-10-31
    • 2016-12-18
    相关资源
    最近更新 更多