Как проверить, была ли сборка сборки с использованием отладки или конфигурации выпуска?
-
25-09-2019 - |
Вопрос
Я начинаю развертывание моего веб-приложения, и мне нужно гарантировать, что все агрегаты, которые будут развернутыми, были построены с использованием конфигурации выпуска. Наша система была разработана с использованием C # /. Net 3.5.
Есть ли способ достичь этого?
Решение
Проверить это. Отказ Идея состоит в том, что вы получите список атрибутов сборки, используя Assembly.GetCustomAttributes()
и искать DebuggableAttribute
а затем найти, если будет такой атрибут IsJITTrackingEnabled
Набор недвижимости.
public bool IsAssemblyDebugBuild(Assembly assembly)
{
return assembly.GetCustomAttributes(false).OfType<DebuggableAttribute>().Any(da => da.IsJITTrackingEnabled);
}
Другие советы
Я любил это Дэйвид предложение, но вы также можете пойти так (AssemblyInfo.cs
):
#if DEBUG
[assembly: AssemblyDescription("Your application assembly (DEBUG version)")]
#else if RELEASE
[assembly: AssemblyDescription("Your application assembly (RELEASE version)")]
#endif
Это более полнофункциональный, так как кто-либо может щелкнуть правой кнопкой мыши на этой сборке, выбрать Properties
и перейти к Details
вкладка.
Если это ваша сборка, я полагаю, используя AssoolConfiguration атрибут - лучший подход. Он документируется как «указывает конфигурацию сборки, например, розничную или отладочную, для сборки».
В зависимости от ваших конфигураций сборки у вас может быть такой код:
#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 на Рубенс Фариас говорит о том же, но я нахожу эту информацию где-то еще, прежде чем видеть комментарий, поэтому я считаю, что это требует более важной записи, как полный ответ вместо комментариев)
Если у вас установлен рефлектор, вы также можете нажать на сборку и искать отладочный атрибут ([Assembly: Debuggable ()]) в панели DissAscebler.
Предполагая, что только конфигурация отладки и отладки, символ отладки по умолчанию определяется конфигурацией отладки, поэтому код ниже в CassInfo.cs (под папкой свойств).
#if DEBUG
[assembly: AssemblyTitle("Debug")]
#else
[assembly: AssemblyTitle("Release")]
#endif
Я использую сборку на сборку, как он будет отображаться на свойствах Windows 7 файла Explorer:
Для тех, кто любит ответ Дэвида и Стевига, вот сценарий LinqPad, написанный в C #. Чтобы использовать сценарий, нужно скачать 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. Заглянуть Непрерывная интеграция и сценарию сборки (например, с Наматывать, или, возможно, что-то более разборчиво ПОДДЕЛКА).
Ключ F5 не является процессом сборки
Чтобы утроить, которые считают, что это не отвечает на вопрос, ОП написал:
... Мне нужно гарантировать, что все сбои, которые будут развернутыми, были построены с использованием конфигурации выпуска.
К гарантия что используйте сервер сборки, например TeamCity и, возможно, инструмент управления выпуском, как Осьминог развертывает. Отказ Заблокируйте свои производственные системы, чтобы разработчики должны пройти официальный процесс сборки.