Piszę dziś moją pierwszą stronę z ostrzami, nie mogę wymyślić, jak wejść #if debug #else #endif
Jak mogę wprowadzić preprocesor w maszynce do golenia?
Piszę dziś moją pierwszą stronę z ostrzami, nie mogę wymyślić, jak wejść #if debug #else #endif
Jak mogę wprowadzić preprocesor w maszynce do golenia?
#if debug
brzytwę, ale zawsze będzie to prawdą. Odpowiedź na twoje pytanie jest taka, że nie ma sensu tego robić, ponieważ Razor zawsze kompiluje się w trybie debugowania.Odpowiedzi:
Właśnie utworzyłem metodę rozszerzenia:
Następnie użyłem go w moich widokach tak:
Ponieważ pomocnik jest skompilowany z symbolem DEBUG / RELEASE, działa.
źródło
public static bool IsDebug(...){ return true; }
i na odwrót w trybie innym niż DEBUG.Jest to wbudowane w
HttpContext
:IMO ma to bardziej sens niż kompilacja warunkowa dla widoków i jest przydatna w niektórych scenariuszach testowych. (Zobacz komentarz Tony'ego Walla poniżej.)
Uwaga dodatkowa:
NullReferenceException
dlaHttpContext.Current
Alex Angas wspomniał , że dostają
NullReferenceException
to rozwiązanie, a kilka osób wyraziło opinię, że nie może to być pojedyncze wydarzenie.Moje najlepsze przypuszczenie:
HttpContext.Current
jest przechowywaneCallContext
, co oznacza, że jest dostępne tylko dla wątku, który obsługuje przychodzące żądanie HTTP. Jeśli twoje widoki są renderowane w innym wątku (być może niektóre rozwiązania dla widoków wstępnie skompilowanych?), Otrzymasznull
wartośćHttpContext.Current
.Jeśli pojawi się ten błąd, daj mi znać w komentarzach i podaj, czy używasz wstępnie skompilowanych widoków lub jakiejkolwiek specjalnej konfiguracji, która może spowodować częściowe renderowanie / wykonanie twoich widoków w innym wątku!
źródło
System.Web
wersja 4.0.0.0) i nawet z usuniętymdebug
atrybutem (a nawet całymcompilation
elementem) nie otrzymuję wyjątku. Mój następny najlepsze hipotezy są takie, że jest to błąd, który został naprawiony w późniejszych wersjachSystem.Web
zestawu lub że jest coś innego w twojej konkretnej sytuacji, o czym nie jestem świadomy. Czy możesz stworzyć minimalny projekt testowy i przesłać go gdzieś?C # i ASP.NET MVC: Używanie dyrektywy #if w widoku
Właściwie ta odpowiedź ma właściwą odpowiedź. Będziesz musiał przejść niezależnie od tego, czy jesteś w trybie debugowania za pośrednictwem modelu. (lub ViewBag), ponieważ wszystkie widoki są kompilowane w trybie debugowania.
źródło
// your debug stuff
Wiem, że nie jest to bezpośrednia odpowiedź na pytanie, ale ponieważ jestem pewien, że konfiguracja debugowania jest następstwem faktu, że faktycznie wykonuje się lokalnie, zawsze można użyć
Request.IsLocal
właściwości jako testu debugowania. Zatem:źródło
Moje rozwiązanie jest bardzo głupie, ale działa. Zdefiniuj gdzieś stałą globalną w pliku statycznym:
Następnie użyj go z Razor w HTML:
źródło
Domyślnie widoki MVC nie są kompilowane, więc #IF DEBUG nie może działać w widoku. Jeśli chcesz skompilować widok w celu uzyskania dostępu do konfiguracji IF DEBUG, musisz:
zmień następujący atrybut z false na true
ponownie załaduj projekt, a następnie zostaną skompilowane widoki.
Jedynym innym rozwiązaniem byłoby posiadanie funkcji w kodzie
a następnie nazwij to z widoku:
źródło
Dla mnie poniższy kod działał bardzo dobrze.
Gdy aplikacja jest debugowana, pojawiają się moje przyciski, kiedy jest wersja , nie są.
źródło
Działa to dla mnie w projekcie białej etykiety .net core 3.0
źródło
W .NET Core można wykonać następujące czynności zamiast sprawdzania zmiennych preprocesora:
źródło