以前也有人问过类似的问题,但我尝试了一切都无济于事。
一个区别是我的产品是一个类库,而不是一个应用程序。虽然如果有办法“放入”像“myapplication.exe.manifest”这样的文件,我们可能会这样做。但本质上,我们的库使用的是 SDK,并且该 SDK 有一个清单文件,该文件必须与 SDK 的任何使用一起使用。
通常,我们希望我们的类库简单地作为插件加载,并正确建立其所有依赖项。但是清单在这里不起作用。
如果我写一个实际的应用程序,确实可以将清单添加到项目中,然后在项目属性中指定清单(在应用程序部分)。对于类库,此选项被禁用,但是是的,我已经能够添加应用程序清单(通过可用模板),并粘贴所需的内容。我可以通过直接查看 VS 中的 DLL(文件/打开)并看到定义了 RT_MANIFEST 来确认嵌入了清单。但是 SDK 在初始化期间有 COMExceptions,除非/直到我求助于将它附加到应用程序。
这是我们正在使用的第三方 SDK 的所有使用所需的清单内容:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0"
xmlns="urn:schemas-microsoft-com:asm.v1"
xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="VideoOS.UI"/>
<file name="ImageViewerDotNet.dll">
<comClass clsid="{b86e5a61-3f0d-4efd-a040-a68a301a1bfa}"/>
</file>
<file name="AudioPlayerDotNet.dll">
<comClass clsid="{31b3afb3-462a-4135-80c4-151649ccd0d5}" />
</file>
</asmv1:assembly>
需要明确的是:VideoOS.UI 不是我们程序集的名称,而是我们正在使用的 SDK 的一部分。因此,现在将清单附加到应用程序是我们能够使用 SDK 的唯一方法。简单地创建一个 .exe.manifest 的方法没有运气。
这是否与我为与我自己的程序集不同的程序集定义依赖项这一事实有关?
[注意:将清单应用于应用程序不会很好地工作,因为这个特定的 SDK/插件不是应用程序的通用功能。]