Разве Visual Studio не делает это для вас?
Всякий раз, когда вы пытаетесь загрузить символы / источник для двоичного файла, VS проверяет, соответствует ли двоичный файл pdb (который ему нужен, если вы хотите отлаживать исходный код, а не просто сборку). Не уверен насчет точного механизма, но он работает довольно: VS отказывается загружаться, если pdb не совпадает, и таким же образом отказывается устанавливать точки останова в источнике, если источник не совпадает с двоичным.
edit: также см. Параметры-> Отладка-> Общие: есть опция Требовать, чтобы исходный файл точно совпадал с исходной версией . Если этот флажок установлен, VS будет выдавать предупреждение при входе в исходный файл, который точно не соответствует двоичному файлу.
изменить в ответ на комментарий : хотя я не вижу веской причины иметь десять исполняемых файлов, вот как я делаю версионность в моих проектах; это может быть использовано для того, что вы просите.
AssemblyInfo для каждого проекта содержит только описание, компанию, ... и закомментированный раздел, содержащий, например,
//VERSION_MAJOR 2
//VERSION_MAJOR 1
(эти файлы также проверяются в svn btw)
, кроме того, в каждом проекте есть файл AssemblyVersion.cs, снова содержащий закомментированный код
//VERSION_BUILD 1223
//VERSION_QFE 10
, а также фактические номера версий, например
[assembly: AssemblyFileVersion ( "2.1.1223.10" )]
(эти файлы не проверяются в SVN, но у меня есть простой скрипт для их генерации после новой проверки)
все мои проекты импортируют базовый проект с общими свойствами, среди которых событие предварительной сборки, которое вызывает исполняемый файл, выполняющий интересную работу: он может читать и записывать числа VERSION_XXX, а также строку AssemblyFileVersion. Предварительная сборка выглядит как
<Exec Command="versioner -d$(ProjectDir) -f$(ProjectDir)Properties\AssemblyInfo.cs
"/>
он читает AssemblyInfo.cs для выборки основных номеров версий, читает AssemblyVersion.cs для других номеров, устанавливает BUILD в текущую версию svn главной директории проекта, увеличивает номер QFE и записывает обратно в AssemblyVersion.cs. Увеличение числа - ключ к достижению того, что вам нужно: ни у одной сборки не будет той же версии, если вы не переполните номер QFE.
Для C ++ я использую
#define VERSION_MAJOR 2
и т. Д., Которые передаются в файл ресурсов, который заполняет раздел VERSIONINFO числами.
Таким образом, в вашем случае при отладке вы посмотрите файл версии и сравните число с версией двоичного файла. Кроме того, вам также необходимо проверить, что дата последнего изменения каждого отдельного исходного файла не новее даты последнего изменения файла версии, иначе вы все еще не уверены.