Как программно проверить, что сборки Debug и Release VS2010 используют точно такую ​​же конфигурацию? - PullRequest
1 голос
/ 20 августа 2010

У нас есть решение Visual Studio 2010 с C#/C++/VB.Net и другими проектами. Он не основан на MsBuild.

Мои коллеги и я в основном работаем с Debug build, а Release используется редко, но используется действительно (скажем, есть ошибка только для релиза; они всплывают время от времени. )

Ночные сборки следуют за своим собственным отдельным процессом и создают нечто, что в некоторой степени эквивалентно сборке выпуска, которую разработчик будет использовать, но не то же самое. Во всяком случае ... не вдаваясь в подробности,

Я хотел бы добавить модульный тест, который проверяет симметрию конфигурации Debug и Release для данной платформы решения (в нашем случае это Win32).

Я бы предпочел решение C# или решение Python (потому что это то, что мы используем для тестирования в настоящее время), но Perl и PowerShell также можно переносить без особых усилий.

Под «решением» я не подразумеваю, что мне нужен полноценный модульный тест, который компилируется и работает по желанию (хотя полные ответы имеют тенденцию привлекать больше голосов с течением времени); подходящий кусок кода, который поможет мне начать, был бы достаточно хорош.

Моя самая большая трудность заключается в анализе файла решения Visual Studio, который не основан на MsBuild (поэтому мне сказали, что это означает, что это не чистый Xml, а забавный формат MSFT ASCII).

Дайте мне знать, если у вас есть вопросы. Еще раз, я хотел бы найти все различия между Debug+Win32 и Release+Win32. я не уверен, является ли Win32 стандартным или вареным внутри.

Спасибо!

1 Ответ

1 голос
/ 20 августа 2010

Чтобы определить, была ли сборка скомпилирована в отладке режим, получить атрибут Debuggable из сборки. Предполагая, что у вас есть экземпляр Assembly, это то, как вы будете делать это:

// The assembly is in a variable named assembly.
object[] attributes = assembly.GetCustomAttributes(typeof(DebuggableAttr ibute), true);

// If the array is null, or has length of zero, then it is not debuggable.
if (!(attributes == null || attributes.length == 0))
{
    // It is debuggable, figure out the level.
    DebuggableAttribute debug = (DebuggableAttribute) attributes[0];

    // At this point, you can access the DebuggingFlags property to
    // determine the level of debugging.
}
...