Wie kann man überprüfen, ob eine Baugruppe gebaut wurde Debug oder Release-Konfiguration verwendet?
-
25-09-2019 - |
Frage
Ich fange Einsatz meiner Web-Anwendung und ich zu garantieren müssen, dass alle Baugruppen, die bereitgestellt werden werden wurden mit Release-Konfiguration aufgebaut. Unser System wurde C # /. Net 3.5 entwickelt wird.
Gibt es eine Möglichkeit, dies zu erreichen?
Lösung
Überprüfen Sie diese . Die Idee ist, dass Sie die Liste der Montage Attribute mit Assembly.GetCustomAttributes()
erhalten und für DebuggableAttribute
suchen und dann finden, wenn solches Attribut IsJITTrackingEnabled
Eigenschaft festgelegt ist.
public bool IsAssemblyDebugBuild(Assembly assembly)
{
return assembly.GetCustomAttributes(false).OfType<DebuggableAttribute>().Any(da => da.IsJITTrackingEnabled);
}
Andere Tipps
Ich war begeistert, dass David Vorschlag, aber man könnte auch diesen Weg gehen (AssemblyInfo.cs
):
#if DEBUG
[assembly: AssemblyDescription("Your application assembly (DEBUG version)")]
#else if RELEASE
[assembly: AssemblyDescription("Your application assembly (RELEASE version)")]
#endif
Dies ist menschlicher freundlich, wie das kann jeder Montage der rechten Maustaste, Properties
auszuwählen und zu Details
Tab gehen.
Wenn es die Assembly Ich glaube, mit der AssemblyConfiguration Attribut ist der beste Ansatz. Es ist dokumentiert, wie „Gibt die Build-Konfiguration, wie Einzelhandel oder debug, für eine Baugruppe.“
Je nach Buildkonfigurationen Sie können Code wie folgt aussehen:
#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
Dann überprüfen Sie die Assemblierung-Attribut:
public static bool IsAssemblyConfiguration(Assembly assembly, string configuration)
{
var attributes = assembly.GetCustomAttributes(typeof(AssemblyConfigurationAttribute), false);
if (attributes.Length == 1)
{
var assemblyConfiguration = attributes[0] as AssemblyConfigurationAttribute;
if (assemblyConfiguration != null)
{
return assemblyConfiguration.Configuration.Equals(configuration, StringComparison.InvariantCultureIgnoreCase);
}
}
return true;
}
(Ich weiß, R. Schreurs Kommentar zu Rubens Farias sagt das gleiche, aber ich habe diese Informationen finden woanders vor den Kommentar zu sehen, so dass ich glaube, dass dies erfordert ein wichtiger Eintrag wie eine vollständige Antwort anstelle eines Kommentars)
Wenn Sie Reflektor installiert haben, können Sie auch für die debug Attribut auf die Montage und das Aussehen klicken ([assembly: Debuggable ()]). Im Disassembler Bereich
Unter der Annahme, nur Debug und Release-Konfiguration, ist DEBUG Symbol standardmäßig definiert mit Debug-Konfiguration, so dass der Code unten in AssemblyInfo.cs (unter Eigenschaften Ordner).
#if DEBUG
[assembly: AssemblyTitle("Debug")]
#else
[assembly: AssemblyTitle("Release")]
#endif
Ich benutze Assembly über Assembly wie es erscheinen wird auf meinem Windows 7 Datei-Explorer Eigenschaften:
Für diejenigen, die wie David und StevieG Antwort, hier ein LINQPad Skript in C # geschrieben ist. Um das Skript zu verwenden, müssen Sie LINQPad 5 und stellen Sie sicher, C # Programm zum Download ausgewählt, wie gezeigt in Abbildung unten.
Einfach DLL_FOLDER_PATH Punkt ersetzen, um den Ordner den DLLs enthält, überprüft werden.
// TODO - Specify your folder containing DLLs to inspect
static string DLL_FOLDER_PATH = @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0";
void Main()
{
(from dllPath in Directory.GetFiles(DLL_FOLDER_PATH, "*.dll")
let assembly = dllPath.SafeLoad()
let build = assembly == null ? "Error" : (dllPath.SafeLoad().IsAssemblyDebugBuild() ? "Debug" : "Release")
select new {
Assembly_Path = dllPath,
Build = build,
}).Dump();
}
static class Extensions {
public static bool IsAssemblyDebugBuild(this Assembly assembly)
{
return assembly.GetCustomAttributes(false).OfType<DebuggableAttribute>().Select(da => da.IsJITTrackingEnabled).FirstOrDefault();
}
public static Assembly SafeLoad(this string path){
try{
return Assembly.LoadFrom(path);
}
catch {
return null;
}
}
}
LINQPad 5 kann heruntergeladen werden hier .
Do bereitstellen nicht über Visual Studio zur Produktion. Schauen Sie in Continuous Integration und scripted baut (wie mit NAnt , oder vielleicht etwas mehr lesbar wie FAKE ).
die F5-Taste ist nicht ein Build-Prozess
Um Verleumder, die glauben, dass dies nicht die Frage beantworten, die OP schrieb:
... Ich muss garantiert werden, dass alle Baugruppen, die sein wollen mit Release-Konfiguration gebaut eingesetzt wurden.
Garantie , dass, verwenden Sie einen Build-Server wie zum Beispiel Teamcity und möglicherweise ein Release-Management-Tool wie Octopus Deploy . Sperren Sie Ihre Produktionssysteme, so dass Entwickler über den offiziellen Build-Prozess gehen muss.