如何将清单(第三方程序集所需)添加到C#类库中?

时间:2012-09-10 21:50:00

标签: c# manifest

之前已经提出过类似的问题,但我已经尝试了一切无济于事。

一个区别是我的产品是类库,而不是应用程序。虽然如果有一种方法可以“插入”像“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 /插件不是应用程序的通用功能。]

0 个答案:

没有答案