Jag har ett klassbibliotek där jag lagt till en hel del extra valideringar. Det är ganska avancerade valideringar av data mot externa källor som gör att metoderna tar många gånger längre tid att utföra. Du skulle kanske kunna använda Conditional methods. Det finns en bra beskrivning på MSDN: Jag tittade på det tidigare men vad jag förstår så kan jag inte använda det. Det låter som att du skulle kunna använda ngn konfigurationsinställning. Om du är ensam utvecklare kan du testa om programmet körs på just din maskin (annars kanske du kan testa på domännamn eller liknande): du behöver väl inte låta användaren sätta detta? Jo det är användaren av klassbiblioteket som skall använda inställningen. Jag som utvecklar har inga problem eftersom jag använder en projektreferens och då blir även klassbibiloteket i debug när applikationen är det.Extra valideringar
Det finns ingen anledning att ha utföra valideringarna i produktion.
Hur distribuerar man enklast klassbiblioteket? Att ha två versioner verkar mest stöka till det eftersom man då måste referera till olika dll:er i debug och release build.
I nuläget har jag en statisk medlem som användaren kan sätta i sin egen kod med
#if DEBUG
Class.DisableDebugValidation = false;
#endif
Finns det något standard eller rekommenderat sätt?Sv: Extra valideringar
http://msdn.microsoft.com/en-us/library/aa288458(VS.71).aspxSv:Extra valideringar
Conditional methods används vid kompileringen men min assembly är ju redan kompilerad. Jag skulle behöva liknande funktionalitet fast run-time. (dvs ett attribut som endast är aktivt om huvudmodulen har DEBUG aktiverat)
Skulle kunna definiera ett eget assembly attribut men det blir ju ungefär samma sak som den statiska flaggan jag har idag.Sv: Extra valideringar - Konfigurationsinställning
Tex då från app.config / web.config
och där försöka läsa ut ett eget element..
...finns det inte så kör du default = produktion
finns elementet läses värdet ut och står där debug så körs inte den extensiva valideringen.
// Hoppas detta löser ditt problem
Lycka till!Sv: Extra valideringar
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Management;
:
:
private void registered(){
try{
string s=GetCPUId();
if(s=="BFEBFBFF00760F29") //id för din cpu
debug = true;
else
debug = false;
}catch{
}
private static string GetCPUId() {
string cpuInfo = String.Empty;
string temp=String.Empty;
ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mc.GetInstances();
foreach(ManagementObject mo in moc) {
if(cpuInfo==String.Empty) {
// only return cpuInfo from first CPU
cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
}
}
return cpuInfo;
}
Koden har jag hittat på msdn.Sv: Extra valideringar
Jag tycker din nuvarande teknik funkar utmärkt, finns ingen anledning till att koden ens ska kunna vara tillgänglig om koden inte är kopilerad i debug-mode.Sv:Extra valideringar
Funderade på att använda DebuggableAttribute men det verkar inte finnas något säkert sätt att få reda på vilken assembly som använder mitt klassbibliotek. GetEntryAssembly fungerar inte med COM vilket är ett användningsområdena för biblioteket. Skulle kunna använda GetCallingAssembly vid varje anrop men det känns lite omständigt.
Låter det vara kvar som det är.