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

时间:2014-10-31 08:47:50

标签: c# .net com manifest

我有以下代码:

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

这个Methode是一个库的一部分,它帮助我通过.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

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

为了测试库,我简单地创建了一个由.net 2.0控制台应用程序调用的Init-methode。控制台应用程序没有app.manifest文件,库也没有。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

我终于得到了一位同事的回答,如果有人犯了同样的错误我想分享。

答案是实际上不可能在库中使用清单。令我困惑的是,用于通过COM互操作进行通信的适配器库是一个库,它有一个正在使用的清单。我不知道的是,由于COM的使用,这是不值得的。正在托管库并使用清单。 没有它,清单就是图书馆项目的一部分,但没有被使用。

我不知道我是否正确解释了这一点,但我希望它有所帮助。