Webアプリケーションの展開を開始しています。展開されるすべてのアセンブリがリリース構成を使用して構築されていることを保証する必要があります。私たちのシステムはC#/。Net 3.5を使用して開発されました。
これを達成する方法はありますか?
チェック this 。アイデアは、Assembly.GetCustomAttributes()
を使用してアセンブリ属性のリストを取得し、DebuggableAttribute
を検索して、そのような属性にIsJITTrackingEnabled
プロパティが設定されているかどうかを確認することです。
public bool IsAssemblyDebugBuild(Assembly assembly)
{
return Assembly.GetCustomAttributes(false).OfType<DebuggableAttribute>().Any(da => da.IsJITTrackingEnabled);
}
私はそれが好きだった 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
タブに移動できるため、これはより人間に優しいものです。
それがあなたのアセンブリである場合、 AssemblyConfiguration 属性を使用するのが最善の方法だと思います。それは「アセンブリのリテールやデバッグなどのビルド構成を指定する」として文書化されています。
ビルド構成によっては、次のようなコードが含まれる場合があります。
#if DEBUG
[Assembly: AssemblyConfiguration("Debug")]
#else
[Assembly: AssemblyConfiguration("Release")]
#endif
次に、Assembly属性を確認します。
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;
}
(Rubens FariasのR. Schreursのコメントも同じだと知っていますが、コメントを見る前にどこかでこの情報を見つけたので、コメントの代わりに完全な応答のようなより重要なエントリが必要だと思います)
Reflectorがインストールされている場合は、アセンブリをクリックして、逆アセンブラペインでデバッグ可能な属性([アセンブリ:Debuggable()])を探すこともできます。
デバッグおよびリリース構成のみを想定すると、デフォルトではデバッグシンボルがデバッグ構成で定義されるため、以下のコードはAssemblyInfo.cs(Propertiesフォルダーの下)にあります。
#if DEBUG
[Assembly: AssemblyTitle("Debug")]
#else
[Assembly: AssemblyTitle("Release")]
#endif
Windows 7のファイルエクスプローラーのプロパティに表示されるので、AssemblyDescriptionではなくAssemblyTitleを使用します。
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;
}
}
}
LINQPAD 5はダウンロードできます ここ 。