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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top