<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    VS2005 VS2008 Manifest 配置問題總結

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    一、問題

    編譯某個遺留工程后,運行程序時報錯,“由于應用程序的配置不正確,應用程序無法啟動。重新安裝應用程序可能會解決這個問題。”

    RFID設備管理軟件 

    查看生成的Manifest文件如下:

    <?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.DebugCRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
        </dependentAssembly>
      </dependency>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.VC80.DebugMFC' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
        </dependentAssembly>
      </dependency>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.VC80.DebugMFC' version='8.0.50727.6195' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
        </dependentAssembly>
      </dependency>
    </assembly>

    問題出現在第三個assemblyIdentity中version的值與機器上該dll的值不符。

    二、解決方法

    需要將manifest中第三個assemblyIdentity中version的值修改為與機器上相應dll的版本。

    查看該項目的屬性發現,【連接器】->【清單文件】->【生成清單】項的值為“是”。由此可見,該manifest文件是編譯器生成的。據推測,manifest中第三條assemblyIdentity信息,可能是根據該項目使用的某些dll依賴的dll版本生成的。例如,該項目用到了A.dll,而A.dll是在其他機器上編譯的,編譯A.dll的機器上的Microsoft.VC80.DebugMFC的版本是'8.0.50727.6195'。

    1. 如果推測是正確的,那么在本機重新編譯A.dll,再重新編譯程序,新生成的manifest中第三個assemblyIdentity中version的信息將會與本機中相應dll的版本信息一致,就不會報上面所說的錯誤信息。

    2. 可以通過不生成manifest,而使用自己寫的manifest來避免這個錯誤。

    使用自己寫的manifest,需要進行如下設置。

    1)將【連接器】->【清單文件】->【生成清單】項的值設置為“否”。表示不需要程序自己生成Manifest。

    RFID設備管理軟件 

    2)將【清單工具】->【輸入和輸出】->【附加清單文件】項的值設置為自己寫的manifest文件的路徑。

    RFID設備管理軟件 

    上圖中include.manifest文件是自己根據程序之前生成的manifest文件改的。內容如下:

    <?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.DebugCRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    
        </dependentAssembly>
    
      </dependency>
    
      <dependency>
    
        <dependentAssembly>
    
          <assemblyIdentity type="win32" name="Microsoft.VC80.DebugMFC" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    
        </dependentAssembly>
    
      </dependency>
    
      <dependency>
    
        <dependentAssembly>
    
          <assemblyIdentity type="win32" name="Microsoft.VC80.DebugMFC" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    
        </dependentAssembly>
    
      </dependency>
    
    </assembly>

    注意第三條assemblyIdentity項中version的信息。

    3)重新生成程序后運行,即解決問題。

    3. 可否不生成manifest?

    既然生成的manifest中某些assembly的version信息與本機不符會導致程序報錯,那么,能不能不生成manifest文件呢?

    答案是:否。

    在VS2005中,運行程序必須有相應的manifest。如果在項目屬性的【連接器】->【清單文件】->【生成清單】中選擇“否”,而在【清單工具】->【輸入和輸出】->【附加清單文件】項中又沒有設置清單文件路徑,那么生成程序時將不會生成manifest文件。

    運行程序時會報如下錯誤:

    RFID設備管理軟件 

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全