.Net Core中每个启动设置的预处理程序指令

时间:2017-08-21 12:34:01

标签: c# asp.net-core preprocessor

我有一个.net核心1.1网络应用程序,我正在与我的团队一起工作。在某些情况下,我们需要使用IIS Express调试应用程序,在其他情况下,我们需要使用WebListener。由于WebListner命令会导致应用程序在IIS Express下运行时崩溃,因此我想在IIS Express下运行应用程序时使用预处理程序指令来禁用它。代码看起来像这样:

   #if !RUNNING_UNDER_IIS_EXPRESS
   .UseWebListener(options =>
    {
        options.ListenerSettings.Authentication.Schemes = AuthenticationSchemes.Negotiate | AuthenticationSchemes.NTLM;
        options.ListenerSettings.Authentication.AllowAnonymous = false;
    })
#endif

有谁能告诉我如何设置它或建议更好的方法来完成整个事情?

1 个答案:

答案 0 :(得分:2)

您的问题的问题是在编译时使用和评估预处理程序指令,而不是运行时。所以,如果你想要一个简单的"切换,您必须在csproj中将其定义为构建配置。您必须在csproj文件中添加构建配置:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='WebListener|AnyCPU'">
    <DefineConstants>DEBUG</DefineConstants>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='IISExpress|AnyCPU'">
    <DefineConstants>DEBUG</DefineConstants>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
</PropertyGroup>

您必须添加信息,构建配置是可用的:

<PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <Configurations>Debug;Release;WebListener;IISExpress</Configurations>
</PropertyGroup>

所以你可以使用你的代码作为例子

#if WEBLISTENER
    .UseWebListener(options =>
    {
        options.ListenerSettings.Authentication.Schemes = AuthenticationSchemes.Negotiate | AuthenticationSchemes.NTLM;
        options.ListenerSettings.Authentication.AllowAnonymous = false;
    })
#endif

#if IISEXPRESS
    /* ... */
#endif

但是:使用此解决方案,您必须更改启动设置和构建设置,才能在配置之间切换:

showing dialogs

有关详细信息,您可以查看这些资源: