Решением, представленным @JRoppert, является почти то же как, что я делаю. Единственная разница - то, что я поместил следующие строки в локальный файл AssemblyInfo.cs, поскольку они могут меняться в зависимости от каждого блока:
#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
[assembly: AssemblyVersion("This is set by build process")]
[assembly: AssemblyFileVersion("This is set by build process")]
[assembly: CLSCompliant(true)]
я также (обычно) использую одну общую информацию о блоке на решение, учитывая, что одним решением является единая линейка продуктов / публикуемый продукт. Общий информационный файл блока также имеет:
[assembly: AssemblyInformationalVersion("0.9.2.0")]
, Который установит значение "ProductVersion", отображенное Windows Explorer.
Обходной путь, который я в итоге использовал, - это просто добавить конфигурацию компиляции и скомпилировать exe как настоящую dll вместо того, чтобы заставлять ее действовать как одна.
с использованием / fixed: нет
по какой-то причине не решил проблему.
Еще одно различие между exes и DLL заключается в том, что точка входа отличается. Точкой входа DLL является DllMain, тогда как у exe есть точка входа в CRT, которая в конечном итоге вызывает main () или WinMain ().
VC ++ по умолчанию удаляет информацию о перемещении из файлов .exes, потому что обычно они не нуждаются в перемещении.
Вы можете заставить его сохранить информацию о перемещении с помощью / fixed: no. См .: http://msdn.microsoft.com/en-us/library/w368ysh2.aspx