雖然我敢肯定,克里的回答和代碼示例(謝謝,克里斯托弗!)是一個更優雅的解決方案的一部分,我們的槍下得到這個出了門,發現一個很相似,但不同,解決方案。
的第一步是創建一個清單程序集:
<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.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
接下來,您必須設置「生成清單」選項設置爲「否」下的配置屬性 - >鏈接器 - >清單文件,並在「嵌入清單」選項設置爲「否」下的配置屬性 - >清單工具 - >輸入和輸出。
最後,讓您的新清單到組件添加下面的命令到項目的生成後步驟:
mt.exe /manifest "$(ProjectDir)cppassembly.dll.manifest" /outputresource:"$(TargetDir)\cppassembly.dll";#2 -out:"$(TargetDir)\cppassembly.dll.manifest"
一旦建成,我們可以打開Visual Studio中的DLL來查看RT_MANIFEST下的表現和確認它有我們的清單!
當我把克里斯托弗的代碼放入stdafx.h中時,它最終將其添加爲附加的依賴項...清單仍在尋找v8.0.50727.762。它生成的清單看起來像這樣:
<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.DebugCRT" 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.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
我無法追查到另一個開關,將刪除或清除現有的依賴關係。我喜歡克里斯托弗的方法比後建立步驟更好,但現在這個工作。如果任何人有任何額外的關於如何清除任何現有的依賴關係,將是偉大的輸入。
謝謝!
我相信只適用於.Net項目。我不認爲這適用於非託管C++項目。我一直在編譯C++代碼時發現Visual Studio定位最新版本的運行時。 – 2009-07-06 15:37:41
正確...只適用於託管項目。我希望這是非常容易的非託管。 :) – 2009-07-06 15:53:24
對不起,我以爲你想要託管C++。您可以通過選擇您定位的SDK來爲本機C++執行類似的操作。這基本上涉及設置正確的編譯器路徑。對於VS2005,有一個名爲vcvars.bat的批處理文件 您是使用makefile生成還是使用devenv? – Christopher 2009-07-06 16:25:58