/ / Dyrektywy preprocesora dla ustawień uruchamiania w .Net Core - c #, asp.net-core, preprocessor

Preprocesorowe dyrektywy dla ustawień uruchamiania w .Net Core - c #, asp.net-core, preprocesor

Mam rdzeń .net 1.1 aplikacja internetowa, nad którą pracuję z moim zespołem. W niektórych przypadkach musimy debugować aplikację za pomocą IIS Express, aw innych przypadkach zamiast tego musimy użyć WebListener. Ponieważ polecenia WebListner spowodują awarię aplikacji, jeśli jest uruchomiona w IIS Express, chciałbym użyć dyrektyw preprocesora, aby wyłączyć tę funkcję, gdy aplikacja jest uruchomiona w IIS Express. Kod wyglądałby mniej więcej tak:

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

Czy ktoś może mi powiedzieć, jak mogę to skonfigurować lub zasugerować lepszy sposób na zrobienie wszystkiego?

Odpowiedzi:

2 dla odpowiedzi № 1

Problem z twoim pytaniem polega na tym, że dyrektywa preprocesora jest używana i oceniana w czasie kompilacji, a nie w czasie wykonywania. Więc jeśli chcesz „łatwego” przełącznika, musisz zdefiniować go w swoim csproj jako konfiguracja kompilacji. Musisz dodać konfigurację kompilacji do swojego csproj plik:

<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>

I musisz dodać informacje, które konfiguracje kompilacji są dostępne:

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

dzięki czemu możesz użyć swojego kodu jako przykładu

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

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

ALE: W tym rozwiązaniu musisz zmienić zarówno ustawienia uruchamiania ORAZ ustawienia kompilacji, aby przełączać się między konfiguracjami:

Buduj + uruchamiaj konfiguracje

Aby uzyskać więcej informacji, możesz przejrzeć te zasoby: