如何:通过移除 CRT 库 DLL 上的依赖项来创建部分受信任的应用程序

本主题讨论如何使用 Visual C++ 通过删除 msvcm90.dll 上的依赖项来创建部分受信任的公共语言运行时应用程序。

使用 /clr 生成的 Visual C++ 应用程序在 msvcm90.dll(C 运行时库的一部分)上具有依赖项。 如果要在部分信任环境中使用应用程序,CLR 将在 DLL 上强制实施某些代码访问安全规则。 因此,必须删除此依赖项,因为 msvcm90.dll 包含本机代码,无法在其上强制实施代码访问安全策略。

如果应用程序不使用 C 运行时库的任何功能,并且你想要从代码中删除此库上的依赖项,则必须使用 /NODEFAULTLIB:msvcmrt.lib 链接器选项,并链接到 ptrustm.lib 或 ptrustmd.lib。 这些库包含用于初始化和取消初始化应用程序的对象文件、初始化代码使用的异常类以及托管异常处理代码。 链接其中一个库将删除 msvcm90.dll 上的任何依赖项。

注意

对于使用 ptrust 库的应用程序,程序集取消初始化的顺序可能有所不同。 对于普通应用程序,程序集通常按加载的相反顺序卸载,但这一点不能保证。 对于部分信任应用程序,程序集通常按加载的顺序卸载。 这也不能保证。

创建部分受信任的混合 (/clr) 应用程序

  1. 若要删除 msvcm90.dll 上的依赖项,必须使用 /NODEFAULTLIB:msvcmrt.lib 链接器选项来指定链接器不包括此库。 有关如何使用 Visual Studio 开发环境或以编程方式执行此操作的信息,请参阅 /NODEFAULTLIB(忽略库)

  2. 将其中一个 ptrustm 库添加到链接器输入依赖项。 如果要在发布模式下生成应用程序,请使用 ptrustm.lib。 对于调试模式,请使用 ptrustmd.lib。 有关如何使用 Visual Studio 开发环境或以编程方式执行此操作的信息,请参阅用作链接器输入的 .Lib 文件

另请参阅

混合(本机和托管)程序集
混合程序集的初始化
混合程序集的库支持
/link(将选项传递到链接器)