我有一个.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
有谁能告诉我如何设置它或建议更好的方法来完成整个事情?
答案 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
但是:使用此解决方案,您必须更改启动设置和构建设置,才能在配置之间切换:
有关详细信息,您可以查看这些资源: