Manifest. Ошибка выполнения двоичного файла в версии выпуска - PullRequest
0 голосов
/ 24 марта 2011

Я разрабатываю двоичный файл в Windows XP с помощью Visual Studio 2005. Я создал отладочную и выпускную версии своего приложения, и на моей машине все идет нормально. Но когда я пытаюсь запустить приложение на другом компьютере, отладочная версия работает нормально (я думаю, потому что у меня одна и та же Visual Studio на обеих машинах), но при выпуске версии возникают проблемы с выполнением (у меня одна и та же версия распространяемых) , Читая здесь, в Stackoverflow, я установил встроенный манифест на no , и когда я сгенерирую свое приложение, я увижу свой выпускной манифест и его содержимое будет таким:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

  <dependency>

    <dependentAssembly>

      <assemblyIdentity type="win32"
       name="Microsoft.VC80.CRT" 
       version="8.0.50727.762" 
       processorArchitecture="x86" 
       publicKeyToken="1fc8b3b9a1e18e3b">
      </assemblyIdentity>

    </dependentAssembly>

  </dependency>

  <dependency>

    <dependentAssembly>

      <assemblyIdentity type="win32" 
       name="Microsoft.VC80.MFC" 
       version="8.0.50727.762" 
       processorArchitecture="x86" 
       publicKeyToken="1fc8b3b9a1e18e3b">
      </assemblyIdentity>

    </dependentAssembly>

  </dependency>

  <dependency>

    <dependentAssembly>

      <assemblyIdentity type="win32" 
       name="Microsoft.VC80.CRT" 
       version="8.0.50727.4053" 
       processorArchitecture="x86" 
       publicKeyToken="1fc8b3b9a1e18e3b">
      </assemblyIdentity>

    </dependentAssembly>

  </dependency>

</assembly>

Если я удалю последнюю запись, 8.0.50727.4053 в манифесте конечного компьютера, я смогу успешно запустить приложение, но почему эта запись добавлена ​​в манифест? Как я могу удалить это?

привет

Ответы [ 2 ]

0 голосов
/ 24 марта 2011

Когда вы строите проект в VS2005, используя DLL Runtime, компилятор автоматически включает информацию, которая используется для добавления записей зависимых сборок в окончательный манифест.

То, что происходит здесь, вероятно, вызвано вамивключая проект статической библиотеки, созданный с помощью VS2005 RTM, и теперь вы пытаетесь построить проект с использованием VS2005 SP1.

Ваши решения:

  • Перестройте статические библиотекив вашем проекте с самой последней версией VS2005, поэтому все зависимые сборки указывают на одну и ту же самую последнюю версию.

  • Пересоберите только ваш EXE-файл с опциями принудительной ссылки на среду выполнения RTM.Инструкции: здесь

  • Полностью отключите автоматические манифесты и просто отправьте вручную созданный только с одной зависимой ссылкой CRS для сборки в качестве предпочитаемой версии CRT.

0 голосов
/ 24 марта 2011

Манифесты - решение Microsoft для их ада DLL. Существует одна запись (libname, version) для каждой библиотеки, которую использует ваша программа, чтобы Windows могла загрузить правильную версию.

Об удалении:

Вы можете попробовать, если ваша версия VS имеет возможность статически связывать библиотеки MFC и CRT в исполняемый файл. Тогда эти предметы должны исчезнуть из манифеста.

Если вы не можете статически связать и имеете полный контроль над своей средой выполнения, вы можете просто отправить ее без файла .manifest. Если вы не можете управлять средой runitme, лучше создать установщик для вашего приложения, который объединит необходимые библиотеки.

...