Web アプリケーションの展開を開始しています。展開されるすべてのアセンブリがリリース構成を使用してビルドされたことを保証する必要があります。私たちのシステムは、C#/.Net 3.5 を使用して開発されました。
これを達成する方法はありますか?
Web アプリケーションの展開を開始しています。展開されるすべてのアセンブリがリリース構成を使用してビルドされたことを保証する必要があります。私たちのシステムは、C#/.Net 3.5 を使用して開発されました。
これを達成する方法はありますか?
これを確認してください。アイデアは、アセンブリ属性のリストを取得して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
次に、アセンブリ属性を確認します。
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 でのコメントも同じことを言っていることは知っていますが、コメントを見る前に別の場所でこの情報を見つけたので、コメントではなく完全な応答などのより重要なエントリが必要だと思います)
Reflectorがインストールされている場合は、アセンブリをクリックして、逆アセンブラペインでデバッグ可能な属性([アセンブリ:Debuggable()])を探すこともできます。
Debug と Release 構成のみを想定すると、DEBUG シンボルはデフォルトで Debug 構成で定義されるため、以下のコードは 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 はここからダウンロードできます。
Visual Studio を使用して運用環境にデプロイしないでください。継続的インテグレーションとスクリプト化されたビルド ( NAnt など、またはおそらくFAKEなどのより読みやすいもの) を調べてください。
これが質問に答えないと信じている中傷者に、OPは次のように書いています:
...展開されるすべてのアセンブリがリリース構成を使用してビルドされたことを保証する必要があります。
それを保証するには、 TeamCityなどのビルド サーバーと、場合によってはOctopus Deployなどのリリース管理ツールを使用します。本番システムをロックダウンして、開発者が公式のビルド プロセスを実行する必要があるようにします。