是否可以编写一个仅在开发环境中执行的类?

Ehi*_*oze 0 c# asp.net-roles asp.net-identity

在我的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();
        }
Run Code Online (Sandbox Code Playgroud)

并有一个类,因为这是我的类中的一个值,用于获取子域运行的 URL(这也是我的 IDENTITY 数据库中的角色的值)

  private string SubDomain(HttpContext httpContext)
        {
            HttpRequest request = httpContext.Request;

            string url = request.Headers["Host"];
            string subDomainUrl = url.Replace("https://", "").Split('/')[0];
Run Code Online (Sandbox Code Playgroud)

//我希望能够基于 http://localhost:44312/?role=adminUsers 获取我的域 //因此,如果它在本地主机上运行并且角色是管理员用户,则这只会在本地执行,作为远程​​ URL有http://adminusers.mydomain.com

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<InjectMyClassHere>(); //My class or interface goes here
Run Code Online (Sandbox Code Playgroud)

我希望这一点很清楚。我怎样才能实现这个目标?即让此类仅在 DEV 中执行,而不部署在 UAT、TEST 或 LIVE 环境中

Cai*_*ard 6

如果您只需要在开发环境中包含代码

#if DEBUG

//code here

#endif
Run Code Online (Sandbox Code Playgroud)

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

Visual Studio 通过点亮/灰显处于/不活动的代码来帮助您,因为:

看到顶部设置了【调试】模式并且代码亮起:

在此输入图像描述

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

在此输入图像描述

如果你的 VS 没有这样的行为,请检查项目属性。发布模式喊“不要定义 DEBUG 常量”,而调试模式应该定义 DEBUG 常量:

在此输入图像描述

在此输入图像描述

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


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

在此输入图像描述