C# 如何使用库的app.manifest文件而不是调用项目
我有以下代码:C# 如何使用库的app.manifest文件而不是调用项目,c#,.net,com,manifest,C#,.net,Com,Manifest,我有以下代码: public static void Init() { Type myClassAdapterType = Type.GetTypeFromProgID("DotNetAdapter.Adapter"); object myClassAdapterInstance = Activator.CreateInstance(myClassAdapterType); IAdapter myClassAdapter = (IA
public static void Init()
{
Type myClassAdapterType = Type.GetTypeFromProgID("DotNetAdapter.Adapter");
object myClassAdapterInstance = Activator.CreateInstance(myClassAdapterType);
IAdapter myClassAdapter = (IAdapter)myClassAdapterInstance;
DWAdapter = myClassAdapter;
}
此方法是库的一部分,它帮助我通过.NET2库中的COM互操作访问.NET4库
我基于本教程:
可在此处查看代码:
在他的示例中,您可以看到控制台应用程序如何使用app.manifest通过COM互操作访问.Net 4库,从而实现无注册操作。
在我的版本中,我用.NET2.0库替换了控制台应用程序
为了测试库,我只创建了一个Init方法,该方法由.NET2.0控制台应用程序调用。控制台应用程序没有app.manifest文件,库没有
我的问题是第一行返回空值。因此myClassAdapterType
为null,因为Type.GetTypeFromProgID(“DotNetAdapter.Adapter”)
返回null
该行应该能够通过访问app.manifest文件检索类型。但问题就在这里。与不读取包含该方法的库的清单不同,VS似乎尝试读取调用控制台应用程序的(不存在的)清单文件
(TLDR)我的问题:
是否有方法更改myClassAdapterType=Type.GetTypeFromProgID(“DotNetAdapter.Adapter”)代码>以便访问库的app.manifest。或者有没有办法告诉VS使用文件夹x中的app.manifest
PS:如果我将库外的清单添加到调用控制台应用程序中,它会工作,但我不允许在这里使用清单文件 我终于从一位同事那里得到了一个答案,我想与大家分享一下,以防有人犯了与我同样的错误 答案是实际上不可能在库中使用清单。让我困惑的是,用于通过COM互操作进行通信的适配器库是一个包含正在使用的清单的库。我不知道的是,这是因为使用了COM。正在承载库并使用清单。 否则,清单是库项目的一部分,但不会被使用
我不知道我是否正确地解释了这一点,但我希望它能有所帮助。你完全错了。需要清单才能找到DLL。将清单放入DLL会给Windows带来鸡和蛋的问题,它找不到DLL,因此也找不到清单。它必须包含在控制台模式应用程序中。如果您“不允许”这样做,那么您当然对清单没有任何用处。当前它是这样工作的:当前它是这样工作的:我有一个DotNet2ConsoleApp,它通过正常引用来使用DotNet2Library。DotNet2库需要一个DotNet4库才能工作。为此,DotNet2Library使用app.manifest定义对DotNet4Library的依赖关系。这就是DotNet2Library使用app.manifest文件的原因。DotNet2ConsoleApp不需要app.manifest,因为DotNet2Library通常在DotNet2ConsoleApp的项目中被引用。我是一个初学者,所以我可能实际上做得根本不对。如果是,请解释并感谢您的回复!这不是清单,您指的是用于配置CLR的app.exe.config配置文件。是,不工作,因为CLR在存储EXE文件的目录中查找。如果不允许复制该目录中的文件,则必须在GAC中注册DLL。始终是[ComVisible]代码的正确解决方案,以避免DLL地狱。如果我通过VS by Add>Application manifest添加它们,我不理解它为什么不是清单。我不能使用注册表,这就是我使用清单方法的原因。如果您有时间,请查看我的原始帖子中的第二个链接,它包含示例的源代码,并提供了更多信息。我只想用.Net 2.0库替换作为控制台应用程序的Net2Assembly。