如果它是纯MSIL(/ clr:pure),我应该在我的应用程序目录中包含哪些MSVCR dll?

时间:2011-09-20 10:44:59

标签: deployment dll installation c++-cli clr

我一直在网上搜索有关这方面的信息,如果没有找到没有安装任何CRT dll的机器,就无法得出安全的结论。我的应用程序非常小,我不想给用户带来可能臃肿的安装或下载他们不需要的东西的负担。

我很想包含220kb msvcm90.dll(C运行时导入库编译为100%纯MSIL代码。所有代码符合MSIL的ECMA URT规范)和2kb Microsoft.VC90.CRT.manifest应用程序的目录。但是,http://msdn.microsoft.com/en-us/library/abx4dbyh%28v=VS.90%29.aspx表示它们现在存储在全局程序集缓存中。

有人可以验证我提出的解决方案吗?

我所说的很多内容都被这篇文章所强化,Visual C++ Redistributables without using VCRedist_x86.exe,但是虽然他有赞成,我仍然会被独立见证的声音所信服。

请问答案可以参考我的只有一个依赖的清单:

<dependency>
  <dependentAssembly>
    <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='idontknowenuff' />
  </dependentAssembly>
</dependency>

由于这并未仅指定托管运行时,如果没有完全安装(从MS下载4Mb),我的解决方案似乎无法运行。

为了进一步复杂化,我的VC / redist目录中的运行时版本是9.0.30729.1,但我认为它将向后兼容。

2 个答案:

答案 0 :(得分:0)

Google图书出现了:

“如果您使用/ clr选项或/ clr:pure选项编译使用CRT的代码,您将获得在本机CRT的而不是中链接的相应纯MSIL CRT” ,Gordon Hogenson - 2006

这似乎是错误的,因为ILDASM显示“.module extern MSVCR90.dll”作为嵌入式清单的第一行。我将这里的答案留给GC,或者提醒一下,并非所有发表的内容都是福音书。

答案 1 :(得分:0)

如果您在调试器中运行(启用混合托管+本机调试),模块窗口应显示程序运行时加载的DLL。