Estou escrevendo minha primeira página de barbear hoje, não consigo descobrir como entrar #if debug #else #endif
Como posso inserir o pré-processador no razor?
Estou escrevendo minha primeira página de barbear hoje, não consigo descobrir como entrar #if debug #else #endif
Como posso inserir o pré-processador no razor?
#if debug
barbear, mas sempre será verdade. Portanto, a resposta para sua pergunta é que não faz sentido, pois o Razor sempre compila no modo de depuração.Respostas:
Acabei de criar um método de extensão:
Em seguida, usei-o em meus pontos de vista da seguinte forma:
Como o auxiliar é compilado com o símbolo DEBUG / RELEASE, ele funciona.
fonte
public static bool IsDebug(...){ return true; }
e vice-versa para o modo não DEBUG.Isso é construído para
HttpContext
:Na IMO, isso faz mais sentido do que a compilação condicional para visualizações e é útil para alguns cenários de teste. (Veja o comentário de Tony Wall abaixo.)
Nota lateral:
NullReferenceException
paraHttpContext.Current
Alex Angas mencionou que eles se deram bem
NullReferenceException
com esta solução, e algumas pessoas votaram positivamente, indicando que esse pode não ser um evento isolado.Meu melhor palpite:
HttpContext.Current
é armazenadoCallContext
, o que significa que só é acessível pelo encadeamento que lida com a solicitação HTTP recebida. Se suas visualizações estiverem sendo renderizadas em um thread diferente (talvez algumas soluções para visualizações pré-compiladas?), Você obteria umnull
valorHttpContext.Current
.Se você receber esse erro, informe-me nos comentários e mencione se está usando visualizações pré-compiladas ou qualquer configuração especial que possa resultar em suas visualizações serem parcialmente renderizadas / executadas em outro thread!
fonte
System.Web
versão 4.0.0.0) e, mesmo com odebug
atributo (ou, de fato, todo ocompilation
elemento) removido, não recebo uma exceção. As melhores hipóteses são que esse é um bug corrigido nas versões posteriores doSystem.Web
assembly ou que existe algo diferente em sua situação específica que eu não conheço.Você poderia criar um projeto de teste mínimo e enviá-lo para algum lugar?C # e ASP.NET MVC: usando a diretiva #if em uma exibição
Na verdade, essa resposta tem a resposta certa. Você terá que passar se está ou não no modo de depuração através do modelo. (ou ViewBag), pois todas as visualizações são compiladas no modo de depuração.
fonte
// your debug stuff
Sei que essa não é uma resposta direta à pergunta, mas como tenho certeza de que a configuração de depuração é um corolário do fato de você estar realmente executando localmente, sempre é possível usar a
Request.IsLocal
propriedade como um teste de depuração. Portanto :fonte
Minha solução é muito estúpida, mas funciona. Defina uma constante global em algum lugar de um arquivo estático:
Em seguida, use-o com o Razor em HTML:
fonte
Por padrão, as visualizações do MVC não são compiladas para que o #IF DEBUG não possa funcionar em uma visualização. Se você deseja compilar a visualização para acessar a configuração IF DEBUG, é necessário:
altere o seguinte atributo de falso para verdadeiro
recarregue seu projeto e, em seguida, as visualizações serão compiladas.
A única outra solução alternativa seria ter uma função no seu código por trás
e depois chame-o de vista:
fonte
Para mim, o código abaixo funcionou muito bem.
Quando o aplicativo está Depurando, meus botões aparecem, quando é Liberado , eles não aparecem .
fonte
Isso funciona para mim em um projeto de marca branca .net core 3.0
fonte
No .NET Core, você pode fazer o seguinte em vez de verificar as variáveis do pré-processador:
fonte