如何使用库的app.manifest文件而不是调用项目



我有以下代码:

    public static void Init()
    {
        Type myClassAdapterType = Type.GetTypeFromProgID("DotNetAdapter.Adapter");
        object myClassAdapterInstance = Activator.CreateInstance(myClassAdapterType);
        IAdapter myClassAdapter = (IAdapter)myClassAdapterInstance;
        DWAdapter = myClassAdapter;
    }

此方法是库的一部分,该库可帮助我通过.NET 2库中的COM互操作访问.NET 4库。

我以本教程为基础:http://www.codeproject.com/Articles/204406/How-To-Use-a-NET-Based-DLL-From-NET-Based-Appl

可在此处查看代码:https://code.msdn.microsoft.com/Using-a-NET-4-Based-DLL-bb141db3

在他的示例中,您可以看到控制台应用程序如何使用app.manifest通过COM互操作访问.Net 4库,以免注册操作。在我的版本中,我用.NET 2.0库替换了控制台应用程序。

为了测试Library,我只创建了一个Init方法,该方法由.net 2.0控制台应用程序调用。控制台应用程序没有app.manifest文件,库有。

我的问题是第一行返回一个null。因此myClassAdapterType为null,因为Type.GetTypeFromProgID("DotNetAdapter.Adapter")返回null。

该行应该能够通过访问app.manifest文件来检索Type。但问题就在这里。VS似乎没有读取包含该方法的库的清单,而是试图读取调用控制台应用程序的(不存在的)清单文件。

(TLDR)我的问题:有没有办法更改Type myClassAdapterType = Type.GetTypeFromProgID("DotNetAdapter.Adapter");,使其访问库的app.manifest。或者有没有办法告诉VS使用文件夹x中的app.maanifest?

PS:如果我将库中的清单添加到调用控制台应用程序中,它就会工作,但我不允许在这里使用清单文件。

我终于从一位同事那里得到了一个答案,我想分享这个答案,以防有人犯下与我相同的错误。

答案是,实际上不可能在库中使用清单。让我困惑的是,用于通过COM互操作进行通信的适配器库是一个具有正在使用的清单的库。我不知道的是,这是因为使用了COM。正在托管库,并使用了清单。否则,清单是图书馆项目的一部分,但不会被使用。

我不知道我对此的解释是否正确,但我希望它能有所帮助。

最新更新