【问题标题】:How to force creation of manifest file in release folder?如何强制在发布文件夹中创建清单文件?
【发布时间】:2013-05-17 10:09:50
【问题描述】:

这快把我逼疯了。我开发了一个 .NET COM DLL,VB6 DLL 包装器使用它来更新和替换应用程序中的一些旧功能。

我现在正在尝试删除在客户端计算机上使用 regasm 的要求,因此我已经研究了如何在一个测试 DLL 上执行此操作,并且一切正常。

为了以防万一,我分支了 DLL,并添加了一个 app.manifest 文件。其他一切都很好,我得到了一切工作。清单是嵌入的,Visual Studio 2012 在发布文件夹中生成一个 mydll.dll.manifest 文件。

然后我回到原来的主干并添加了一个 app.manifest 文件(合并没有意义,因为没有代码更改)。我将分支的内容复制到 app.manifest 文件中并构建了发布版本。清单嵌入在 DLL 中,但没有生成 mydll.dll.manifest 文件。

我知道拥有 mydll.dll.manifest 文件并不是绝对必要的,但我希望事情保持一致(并且由于某种原因,测试过程不会产生与主干版本相同的结果)所以如何我可以强制创建它吗?

这是一个 VB.NET DLL 项目,因此它没有(或者我找不到)first answer here 中提到的“生成清单”属性下拉列表。我该如何设置?或者有没有办法直接编辑项目文件来设置?

参考资料:

【问题讨论】:

  • 您不需要 dll 的清单,因为它使用当前进程的安全令牌,例如应用程序,因此您需要 exe 的清单(我认为)
  • 是的,我知道,但也需要嵌入清单才能使 reg free com 正常工作

标签: vb.net visual-studio regfreecom


【解决方案1】:

你犯了一个相当普遍的错误。无注册 COM 清单可帮助应用程序找到 COM 服务器,而无需查看注册表来定位 DLL。在DLL中嵌入manifest就像是在解决鸡和蛋的问题,Windows如果找不到DLL就不可能找到manifest。

清单需要是客户端应用程序的一部分。这很棘手,因为它是 VB6,它不支持在其可执行文件中嵌入清单。

您可以修改 mt.exe 工具,这是一个支持在可执行文件中嵌入清单的 SDK 实用程序。您必须在构建 VB6 二进制文件后手动运行它。这很不好玩,而且当你忘记时很可能会造成麻烦。它通常不是一个令人愉快的工具,文档很少、不完整且无用,是清单的一个长期问题。

回退是一个单独的 app.exe.manifest 文件,当 Windows 找不到嵌入在可执行文件中的清单时,接下来会查找该文件。其中“app.exe”必须重命名为VB6程序的名称。 EXE,而不是 DLL。现在,这也使您有机会避免注册 VB6 DLL,如果您真的想让您的程序运行无注册,这大概是您真正想要的。缺点是你调试你的VB6程序,EXE错误,就不行了。您还需要一个位于 VB6 安装目录中的 vb6.exe.manifest。

也许不用说,在这里使用 VB6 很难取得成功。只是不是为了帮助你做到这一点,他们在 1998 年没有时间机器。

【讨论】:

  • 诚然过时了,这里的演练msdn.microsoft.com/en-us/library/ms973913.aspx 向库和客户端添加了一个清单,你是说没有必要使用库清单来获得 reg free com在职的?如果是这样,请指出正确的参考方向
  • 这个问题从不谈论 DLL。它也与无注册的 COM 清单无关。使用清单的原因不止一个。一个 C# EXE 总是有一个清单,即使你没有显式添加一个,它也会声明这个 EXE 与 UAC 兼容。
  • 我第一次剪切并粘贴了错误的链接,请检查我已经编辑过的正确的msdn链接
  • 我不知道你为什么给我这些链接,我已经知道清单是如何工作的。在了解它们的工作原理之前,您不会取得成功。鸡和蛋的问题显然是你最大的问题,不要将清单添加到你的 DLL,它需要进入使用 DLL 的可执行文件。
  • 为什么所有示例都向库中添加清单?直截了当地说我听不懂很好,但你没有提供任何方法让我达到我能理解的程度,而你所说的与其他人的说法完全矛盾
【解决方案2】:

我不得不承认我根本不懂 VB,但对于 C++ 和 C# Visual Studio 项目,我以前不得不在构建后的步骤中调用 mt.exe 以获取 DLL体现我想要的。也许这种解决方法也适用于您的情况?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多