C++ SxS清单中的程序集标识名
关于激活上下文API和SxS清单,我有两个问题。它们看起来很简单,但我仍然找不到任何好的答案C++ SxS清单中的程序集标识名,c++,dll,winsxs,sxs,activation-context-api,C++,Dll,Winsxs,Sxs,Activation Context Api,关于激活上下文API和SxS清单,我有两个问题。它们看起来很简单,但我仍然找不到任何好的答案 我有两个文件名为foo.dll和bar.dll的dll库,它们都带有嵌入式清单,foo依赖于bar。是否有任何方法可以使用assemblyIdentity名称而不是文件名来分配这两个?例如,如果我希望bar.dll的程序集标识为CompanyName.Subsection.bar?如果我像这样更改它的标识-我在尝试加载foo.dll“Dependent Assembly CompanyName.Subs
我有两个文件名为foo.dll和bar.dll的dll库,它们都带有嵌入式清单,foo依赖于bar。是否有任何方法可以使用assemblyIdentity名称而不是文件名来分配这两个?例如,如果我希望bar.dll的程序集标识为
CompanyName.Subsection.bar
?如果我像这样更改它的标识-我在尝试加载foo.dll“Dependent Assembly CompanyName.Subsection.bar,type=“win32”,version=“0.1.2.3”时出错“
。当然,如果我将名称程序集标识指定为文件名(),则可以将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
元素中指定的名称完全一致(请参见上面的文件夹结构示例)
另外请注意,您可以使用命令行工具诊断与加载SxS程序集相关的问题。分步说明:
从Visual Studio命令行运行sxstrace trace-logfile:mytrace.etl
。在按ENTER键之前,该命令不会返回。但是,请先不要按ENTER键
启动加载foo.dll的应用程序以重现问题
然后在命令行窗口中按ENTER键停止sxstrace
您现在有一个文件mytrace.etl,它不是人类可读的。通过运行sxstrace parse-logfile:mytrace.etl-outfile:mytrace.txt
,将其转换为可读格式。您将得到一个文件mytrace.txt,其中显示加载foo.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>
<file name="foo.dll">
</file>