4

我已使用新的 MFC 功能包类将我的 Microsoft Visual Studio 6.0/C++/MFC 应用程序移至 Visual Studio 2008 SP1。我明确地不使用 .NET Framework 中的任何内容。但是,我们无法在尚未安装 .NET Framework 3.5 SP1 的系统上安装。Installshield 无法加载它需要调用例程的应用程序 dll。对于使用 VS2008 构建的每个此类 (C++/MFC) 应用程序中内置的 .NET Framework 是否存在隐式依赖关系?如果没有,我如何找出应用程序中导致 .NET 依赖的原因?如果可能的话,我想消除这种依赖。

谢谢,巴里

4

5 回答 5

6

您确定依赖于框架本身,而不是 VC++ 9.0 运行时吗?另外,您确定构建设置不包含 /clr 开关吗?

以下是 VC++ 可再发行组件:http: //www.microsoft.com/DOWNLOADS/details.aspx? FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en

于 2009-09-24T17:22:29.943 回答
4

依赖关系很可能在 CRT90(VC 运行时)上。您应该编译静态链接到运行时而不是默认动态链接的自定义操作 dll。您不必构建静态链接的整个应用程序,InstallShield 可以为您安装 CRT;它只是失败的自定义操作 dll,因为它在 IS 可以运行 CRT 合并模块之前执行。

于 2009-09-24T17:31:37.387 回答
3

请参阅 Microsoft 的这篇文章。总的来说,当您安装 .NET Framework 4.5 时,您以前独立于 .NET 的项目现在将依赖于 .NET 框架。

解决方案:

  1. 从 IDE 中卸载项目,然后以 xml 或文本模式打开项目文件 (.vcproj)。

  2. 在 xml 根标签(即“Project”)下,添加以下文档片段:

    <PropertyGroup> <AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences> </PropertyGroup>

  3. 重新加载您的项目。

  4. 除了微软文章中描述的前面的步骤,检查你的安装项目的“先决条件”并取消勾选 .NET 框架

  5. 删除相关的“启动条件”。

  6. 重建 msi,现在应该删除依赖项。

于 2013-03-26T06:18:25.543 回答
2

Installshield 无法加载需要调用例程的应用程序 dll。

这听起来像您的安装程序有问题。

这个DLL是你的DLL吗?如果是这样,您必须在其中包含一些使用/clr编译开关(添加 .NET 依赖)或引用添加 .NET 依赖的库(您的或第三方)的内容。

VC++ 2008 中没有任何东西需要.NET。您可以构建一个只需要 VC 运行时的 MFC 应用程序。

于 2009-09-24T17:32:30.817 回答
0

不确定我是否理解这里的问题,但我在部署项目中看到了类似的问题。.vdproj您是否使用Visual Studio 提供的 MSI 部署项目 ( )?在这种情况下...

如果您.NET 依赖项添加到.vdproj项目中,然后将其删除,则依赖项仍然存在。这是 GUI 中的错误!依赖似乎消失了,但它仍然存在!

您需要做的是.vdproj在文本编辑器中打开文件并手动删除 .NET 依赖项。

于 2011-12-01T15:51:05.420 回答