gpt4 book ai didi

c# - 配置基于 .NET 的组件以实现免注册激活

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:17 25 4
gpt4 key购买 nike

我一直在尝试让基于 .NET 的免注册 COM DLL 运行,但没有成功。

  • 在 Visual Studio 2008 中,我添加了一个新的 C# 类库。
  • 我启用了“使程序集 COM 可见”和“注册 COM 互操作”选项。
  • 我添加了一个具有一些功能的公共(public)接口(interface)和类。
  • 我向我的 C++ 客户端应用程序添加了一个 list 依赖项:#pragma comment(linker,"/manifestdependency ...

但是当我启动我的应用程序时,我得到“应用程序启动失败,因为应用程序配置不正确”。

我用微软的 mt 工具提取了 C++ 客户端应用程序和 C# COM DLL 的 list 文件,两者的信息是相同的(C++ list 文件中的 dependentAssembly 包含与COM list 文件中的 assemblyIdentity)。

我也尝试过 http://msdn.microsoft.com/en-us/library/eew13bza.aspx 中描述的方法但结果相似。

同样,我尝试在我的 C++ 客户端应用程序的“框架和引用”中添加对我的 COM 项目的引用。该属性页上的信息看起来很有希望(它显示了“复制本地”、“复制依赖项”等选项以及“assemblyIdentity”等属性),但 Visual Studio 既不复制 DLL 也不自动向 list 文件添加依赖项。

请注意,“已注册变体”工作正常。

有人知道我做错了什么吗?

更新:

  • 当我创建一个简单的 C++ DLL 并嵌入一个与我的 .NET COM DLL 具有相同名称和版本(相同的 assemblyIdentity)的 list 时,我的应用程序可以正常启动。所以问题出在我的 .NET COM DLL 的 list 文件上。
  • 我可以使用 mt -managedassemblyname:... 从 DLL 中成功提取 list ,然后使用 mt -outputresource:... 嵌入相同的 list ,但是这也不会导致 Windows 成功解决依赖关系。

最佳答案

我自己找到了获得免注册 .NET COM 互操作所需的步骤:-)

  • 运行:mt -managedassemblyname:"myDll.dll"-out:"myDll.manifest"
  • 清理 list (参见 http://msdn.microsoft.com/en-us/library/eew13bza.aspx 中的格式)。主要是我需要删除除 assemblyIdentity、clrClass 和 file 之外的所有标签(特别是删除 runtime、mvid 和 dependency 标签)。
  • 运行 mt -outputresource:"myDll.dll"-manifest "myDll.manifest"。基本上,这会将修改后的 list 作为资源添加到 DLL。请注意,这显然不是同一个 list (位置)!如果我使用 managedassemblyname 选项重新提取 list ,我仍然会得到“旧” list 。如果我使用 inputresource 选项提取它,我会得到新的。

多亏了 Windows Vista,我几乎找到了这一切。与我的 Windows XP 不同,它包含一个名为 sxstrace 的工具,它提供了有关并行执行问题的相当详细的信息。

关于c# - 配置基于 .NET 的组件以实现免注册激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2094032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com