47

Web アプリケーションの展開を開始しています。展開されるすべてのアセンブリがリリース構成を使用してビルドされたことを保証する必要があります。私たちのシステムは、C#/.Net 3.5 を使用して開発されました。

これを達成する方法はありますか?

4

6 に答える 6

47

これを確認してください。アイデアは、アセンブリ属性のリストを取得してAssembly.GetCustomAttributes()検索しDebuggableAttribute、その属性にIsJITTrackingEnabledプロパティ セットがあるかどうかを確認することです。

    public bool IsAssemblyDebugBuild(Assembly assembly)
    {
        return assembly.GetCustomAttributes(false).OfType<DebuggableAttribute>().Any(da => da.IsJITTrackingEnabled);
    }
于 2010-02-02T18:38:16.210 に答える
30

私はDavidの提案を気に入りましたが、次の方法でも構いません ( AssemblyInfo.cs):

#if DEBUG
[assembly: AssemblyDescription("Your application assembly (DEBUG version)")]
#else if RELEASE
[assembly: AssemblyDescription("Your application assembly (RELEASE version)")]
#endif

Properties誰でもそのアセンブリを右クリックして選択し、Detailsタブに移動できるため、これはより人間に優しいものです。

于 2010-02-02T19:04:56.463 に答える
10

それがあなたのアセンブリである場合、AssemblyConfiguration属性を使用することが最善の方法だと思います。「アセンブリのリテールやデバッグなどのビルド構成を指定する」として文書化されています。

ビルド構成によっては、次のようなコードが含まれる場合があります。

#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif

次に、アセンブリ属性を確認します。

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;
}

(R. Schreurs の Rubens Farias でのコメントも同じことを言っていることは知っていますが、コメントを見る前に別の場所でこの情報を見つけたので、コメントではなく完全な応答などのより重要なエントリが必要だと思います)

于 2014-11-03T15:34:17.033 に答える
2

Reflectorがインストールされている場合は、アセンブリをクリックして、逆アセンブラペインでデバッグ可能な属性([アセンブリ:Debuggable()])を探すこともできます。

于 2011-06-29T15:14:01.880 に答える
2

Debug と Release 構成のみを想定すると、DEBUG シンボルはデフォルトで Debug 構成で定義されるため、以下のコードは AssemblyInfo.cs (Properties フォルダーの下) にあります。

#if DEBUG
[assembly: AssemblyTitle("Debug")]
#else
[assembly: AssemblyTitle("Release")]
#endif

Windows 7 ファイル エクスプローラーのプロパティに表示されるため、AssemblyDescription ではなく AssemblyTitle を使用します。

DLL ファイルのプロパティ

David と stevieg の答えが好きな人のために、C# で書かれた LINQPad スクリプトを次に示します。スクリプトを使用するには、LINQPad 5をダウンロードし、下のスクリーンショットに示すように C# プログラムが選択されていることを確認する必要があります。

DLL_FOLDER_PATH を、検査する DLL を含むフォルダーを指すように置き換えるだけです。

// 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;
        }
    }
}

LINQPad5 を使用したリリースまたはデバッグ ビルドの確認

LINQPAD 5 はここからダウンロードできます。

于 2016-03-10T12:50:41.763 に答える
0

Visual Studio を使用して運用環境にデプロイしないでください。継続的インテグレーションとスクリプト化されたビルド ( NAnt など、またはおそらくFAKEなどのより読みやすいもの) を調べてください。

F5 キーはビルド プロセスではありません

これが質問に答えないと信じている中傷者に、OPは次のよ​​うに書いています:

...展開されるすべてのアセンブリがリリース構成を使用してビルドされたことを保証する必要があります。

それを保証するには、 TeamCityなどのビルド サーバーと、場合によってはOctopus Deployなどのリリース管理ツールを使用します。本番システムをロックダウンして、開発者が公式のビルド プロセスを実行する必要があるようにします。

于 2010-02-02T18:40:25.157 に答える