SXS中的汇编身份名称表现出来



我有两个有关激活上下文API和SXS的问题。他们看起来很简单,但我仍然找不到任何好答案。

我有两个带有文件名foo.dll和bar.dll的DLL库,均带有嵌入式清单,Foo取决于bar。除了文件名以外,还有什么方法可以用汇编名称分配这两个?例如,如果我希望bar.dll的汇编身份为 CompanyName.Subsection.bar?如果我更改它是这样的身份 - 尝试加载foo.dll "Dependent Assembly CompanyName.Subsection.bar,type="win32",version="0.1.2.3" could not be found"时会出现错误。当然,如果我将姓名汇编身份指定为文件名(<assemblyIdentity name="bar"(,一切都有效,但是有一种方法可以使用这些虚线名称吗?

foo.dll

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="foo" version="0.1.2.3" type="win32"/>
<dependency>
    <dependentAssembly>
        <assemblyIdentity name="CompanyName.Subsection.bar" version="0.1.2.3" type="win32" />
    </dependentAssembly>
</dependency>
<file name="foo.dll">
</file>
</assembly> 

bar.dll

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="CompanyName.Subsection.bar" version="0.1.2.3" type="win32"/>
<file name="bar.dll">
</file>
</assembly> 

可以做到,如果而不是嵌入bar的清单。dll将其与dll本身一起放在单独的文件夹中。即:

foo.dll
CompanyName.Subsection.bar/
├── bar.dll
└── CompanyName.Subsection.bar.manifest

您仍然需要将第一个清单嵌入到foo.dll中。我相信您可以从该清单中删除以下片段,因为它是嵌入式清单,因此不需要指定DLL属于汇编的内容:

<file name="foo.dll">
</file>

bar.dll的清单很好,但是请确保将文件夹命名为assemblyIdentity元素中指定的清单文件(请参见上面的示例文件夹结构(。

还要注意,您可以诊断使用SXSTRACE命令行工具加载SXS组件有关的问题。逐步说明:

  1. 从Visual Studio命令行中运行sxstrace trace -logfile:mytrace.etl。在按ENTER之前,该命令将不会返回。但是,请勿按Enter。
  2. 启动加载foo.dll的应用程序以复制您的问题
  3. 然后按Enter在命令行窗口中停止SXSTRACE
  4. 您现在有一个文件mytrace.etl,这不是人类可读。通过运行sxstrace parse -logfile:mytrace.etl -outfile:mytrace.txt将其转换为可读格式。您将获得一个文件mytrace.txt,该文件显示会发生什么,当您加载foo.dll以及无法解决其某些依赖关系时。

相关内容

  • 没有找到相关文章

最新更新