我可以限制 IIS 仅运行发布代码吗

我可以限制 IIS 仅运行发布代码吗

我所在的公司有 2 台服务器,1 台发布服务器和 1 台测试/调试服务器。我想限制发布服务器,使其只能运行编译为发布(未定义 DEBUG 常量)的代码。

这可能吗?如果可以,我该如何实现?我可以在 IIS 或 web.config 中设置它吗?

答案1

使用一个标志与另一个标志进行编译时,编译的程序集没有区别。名称“Debug”和“Release”纯粹是常规的。我假设您关心的设置是代码是否经过优化。这也是无法检测到的。

相反,正如@HABO 所建议的那样,答案是定义一个标志,该标志存在于开发人员的机器上,使调试代码可以接受。您可以使用以下简单的东西:

static class AssertProductionOptimized
{
    private static bool checkCompleted = false;
    private static bool isDeveloper = false;

    private const string regPath = @"Software\My Awesome Software, Inc";
    private const string regValue = "IsDeveloper";

    [Conditional("DEBUG")]
    public static void AssertOptimized()
    {
        if (checkCompleted)
        {
            isDeveloper = checkIfDeveloper();
            checkCompleted = true;
        }

        if (!isDeveloper)
        {
            throw new InvalidOperationException(string.Format("Debug code running "
                + "on non-developer machine.  Either build without DEBUG flag, or "
                + "add a DWORD named {1} with a value of 1 to HKLM\\{0}", 
                regPath, regValue));
        }
    }

    private static void checkIfDeveloper()
    {
        RegistryKey hkKey = null;
        try 
        {
            hkKey = Registry.LocalMachine.OpenSubKey(regPath);

            // if the key does not exist, we are not a developer
            if (hkKey == null)
                return false;

            var hkValueObj = hkKey.GetValue(regValue);

            return object.Equals(hkValueObj, 1);
        }
        catch (Exception ex)
        { 
            throw new Exception("Exception occurred while checking developer status", ex);
        }
        finally
        {
            if (hkKey != null)
                hkKey.Dispose();
        }
    }
}

相关内容