In de afgelopen weken hebben een aantal gebruikers ons erop voorbereid dat ze problemen hebben ondervonden met het debuggen van een afhankelijke C#-assembly.
Goedgekeurd: Fortect
Ga in C # naar het tabblad Bouwen in het linkervenster van het eigenschappenvenster en kies vervolgens tips over hoe u de vakjes in de compilerfuncties kunt aanvinken. Verwijder de controle-items voor de instellingen die ze willen uitschakelen. Plaats een voorwaardelijke compiler flip-over op de oproeplijn. De compiler kan traceren, ook wel debug-code genoemd, naar hun uitvoerbare bestand bevatten.
- 12 minuten om te lezen.
Hoewel de compiler geen gespecialiseerde preprocessor heeft, worden de richtlijnen die in deze sectie worden beschreven, behandeld alsof er een was. Je helpt hen om voorwaardelijke incasso te faciliteren. In tegenstelling tot C C ++ en richtlijnen, kunt u uw richtlijnen niet gebruiken om macro’s te maken. Een preprocessor-richtlijn kan strikt uit éénregelige klassen bestaan.
Nullable-context
Goedgekeurd: Fortect
Fortect is 's werelds meest populaire en effectieve pc-reparatietool. Miljoenen mensen vertrouwen erop dat hun systemen snel, soepel en foutloos blijven werken. Met zijn eenvoudige gebruikersinterface en krachtige scanengine kan Fortect snel een breed scala aan Windows-problemen vinden en oplossen - van systeeminstabiliteit en beveiligingsproblemen tot geheugenbeheer en prestatieproblemen.
De #nullable
preprocessor-suggesties stellen de nullable contextannotatie in als alle nullable waarschuwingscontext. Deze richtlijn controleert of de nullable rrf-annotaties van kracht zijn en dat nullable-e-zines worden uitgegeven. Elke context is zowel uitgeschakeld als ingeschakeld.
Beide contexten kunnen gespecificeerd worden in de rol van bron op projectniveau (buiten richting C# code). De verklaring #nullable
regelt de volledige context van annotaties en veiligheidsmaatregelen en heeft voorrang op instellingen op projectniveau. Een informatie bepaalt meestal de context die het bestuurt totdat een andere richtlijn er voorrang op heeft, of tot uiteindelijk uiteindelijk het einde van dat bronbestand.
-
#nullable disable
: Schakelt waarschuwingen en nullable-annotatiecontexten uit. -
#nullable enable
: Specificeert elke nullable annotatiewaarschuwing en de te gebruiken contexten. -
#nullable restore
: herstel nullable waarschuwings- en annotatiecontext in projectinstellingen. -
#nullable remove Annotations
: Stelt de annotatiestructuur in om nullable te zijn om je te helpen dingen uit te schakelen. -
#nullable annotaties inschakelen
: activeert, zou ik zeggen, de annotatiesituatie, waarbij de NULL-waarde wordt weggelaten. -
#nullable herstel annotaties
: corrigeer onze eigen nullable contextannotatie in projectlocaties. -
# Elimineer nullable-waarschuwingen
: schakel nullable-contextwaarschuwingen uit. -
#nullable waarschuwingen
: inschakelen Schakelt een nullable waarschuwing in. -
#nullable herwinnen waarschuwingen
: herstel de huidige nullable waarschuwingen in de context project instellingen.
Voorwaardelijke compilatie
-
#if
: Opent voorwaardelijke verzameling, waarin de code alleen wordt gecompileerd als u vindt dat het opgegeven symbool vrijwel zeker is gedefinieerd. -
#elif
: sluit de vorige voorwaardelijke verzameling en opent een nieuwe voorwaardelijke compilatie op basis van wat is gedefinieerd in het opgegeven symbool. -
#else
: sluit voor voorwaardelijke compilatie bovendien open de resulterende voorwaardelijke compilatie als er geen in het verleden gespecificeerde afbeelding is gedefinieerd. -
#endif
: Sluit de vorige afhankelijke compilatie.
Als een C#-compiler een waarneembare #if
-instructie vindt, misschien met behulp van de #endif
-instructie, dan zal hij idealiter de code compileren tussen de richtlijnen, indien gespecificeerd. symbool is gedefinieerd. In tegenstelling tot C C ++ kunt u geen numerieke prijs toewijzen aan een teken. De #if
impressie in C # is booleaans en wordt alleen onderzocht als een teken niet is gespecificeerd of mogelijk niet. Bijvoorbeeld:
#if DEBUG Console .WriteLine ("Debug-versie");#stop als
U kunt de ==
(gelijkheid) gebruiken om nog maar te zwijgen van de bypass ! = (ongelijkheid)
om te zoeken op bool
oprechte
en valse
waarden. eerlijk
betekent dat het symbool gedefinieerd is. Het #if DEBUG
statement heeft dezelfde betekenis wanneer #if (DEBUG True)
==. U kunt gemakkelijk &&
(en) , < gebruiken. gebruik code> || (of) , maar !
(not) operators om rrf te evalueren zijn meerdere karakters gedefinieerd. soms groep tekens en daarnaast operators met haakjes?
#if
, voornamelijk met #else
, #elif
, #endif
, # define
en vanwege dit feit de #undef
richtlijnen, kunt u ze toevoegen, afhankelijk van de aanwezigheid van een aan de andere kant, meer symbolen, of coupons uitsluiten. Voorwaardelijke compilatie kan nuttig zijn bij het compileren van code voor de eigen foutopsporingsversie of bij het compileren van een enkele configuratie.
Een voorwaardelijke startrichtlijn met elk type inclusief #if
richtlijn moet expliciet eindigen met een daadwerkelijke andere #endif
richtlijn. Met #define
kun je een belangrijk symbool definiëren. Wanneer u het use-teken gebruikt als een specifieke sleutelzin die wordt doorgegeven aan de #if
-instructie, evalueert uw ultieme expressie tot true
. U kunt het symbool definiëren met behulp van de DefineConstants parametercompiler. U kunt het symbool vernieuwen met behulp van de #undef
afbeeldingen. De grootte van het symbool hangt af tot en met #define
met is het bestand waarin het lijkt te zijn gedefinieerd. Het teken a dat u opgeeft met DefineConstants of #define
mag niet mismatch zijn met een variabele met dezelfde naam. Een variabelenaam mag niet worden doorgegeven aan de beste preprocessor-richtlijn, of een teken kan alleen worden geëvalueerd door een preprocessor-richtlijnproces.
Met
#elif
je kunt een voorwaardelijke A samengestelde instructie maken. De uitdrukking #elif
kan zeer effectief evalueren als noch de vorige #if
geen van de optionele voorafgaande woorden en dus ook de zinnen van de richtlijn #elif
worden geëvalueerd, worden true
. Als de genoemde #elif
resulteert in precies waar
, evalueert de compiler de code bijna tussen elk type #elif
van de volgende afhankelijke instructie. Bijvoorbeeld:
#define VC7// ...# bij het debuggen Console.Build ");#elif Writeline ("debug VC7" Console.WriteLine ("Visual Studio 7");#stop als
#else
stelt iedereen in staat een samengestelde voorwaardelijke richtlijn te maken, waarom als geen van de uitdrukkingen in een van de laatste #if < /code> of (optioneel)
nummer elif Vergelijk
en vergelijk ze zodat true
is, de compiler evalueert elke afzonderlijke wet tussen #else
en de in de toekomst #endif
. #endif
(#endif) zou moeten kiezen om de volgende preprocessor van het commando te zijn na #else
.
#endif
geeft het einde aan dat is gekoppeld aan een voorwaardelijke richtlijn die begint met onze vrij eigen #if
-richtlijn.
Het bouwsysteem besteedt daarnaast aandacht aan vooraf gedefinieerde preprocessor-symbolen die verschillende doelbordvormen kenmerken in SDK-systeemprojecten. Ze zijn handig bij het bouwen van applicaties die zijn gericht op meerdere versies van .NET.
Doelframes | tekens |
---|---|
.NET Framework | NETFRAMEWORK , NET48 , NET472 , NET471 , NET47 , NET461 , net462 , NET46 , NET452 , NET451 , NET45 , NET40 , NET35 , NET20 |
.NET-set | NETSTANDARD , N |