2017-08-21 32 views
1

我有一個.net核心1.1 web應用程序,我正在與我的團隊合作。在某些情況下,我們需要使用IIS Express來調試應用程序,而在其他情況下,我們需要使用WebListener。由於WebListner命令會導致應用程序在IIS Express下運行時發生崩潰,因此我希望使用預處理器指令在IIS Express下運行應用程序時禁用此功能。該守則將是這個樣子:.Net Core中每次啓動設置的預處理器指令

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

誰能告訴我怎麼可以設置此還是建議做整個事情的一個更好的辦法?

回答

1

問題與您的問題是在編譯時使用和評估預處理器指令,而不是運行時。所以如果你想要一個「easy」開關,你必須在你的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> 

而且你要添加的信息,這些信息建立配置awailable:

<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 

但是:有了這個解決方案,你必須改變兩者的啓動設置和構建設置,您configuratio之間切換NS:

Build + Launch Configurations

因爲你可以看看這些ressources更多信息: