注:
这是我上一篇文章的延续:
动态调用程序集的复杂 API 问题
我正在编写一个在网络上运行并使用 SQL Server 保存和提取数据的 .Net Windows 窗体应用程序。
我想提供一个迷你“插件”API,开发人员可以在其中构建自己的程序集并实现特定的接口(IDataManipulate)。然后我的应用程序可以使用这些程序集来调用 IDataManipulate.Execute()。
我决定采用解决方案#3:
将 dll 字节作为 byte[] 保存到数据库中,并在每次用户启动我的应用程序时在本地 PC 上重新创建 dll。
这就是我正在做的事情:
一切正常; dll 已加载,我可以调用 IDataManipulate.Execute(),但这个问题除外:
当我从主程序集中调用 IDataManipulate.Execute() 时,出现如下错误:
“我无法从此程序集中加载类型 xxxx”。
无法加载的类型属于引用的程序集之一,而不是主程序集。
为什么会出现这种情况?
有什么建议吗?
要回答您的第一个问题,您可以检查引用的程序集的位置,并且仅当它位于同一文件夹中时才将其添加到数据库中。
有点晚了,但您还可以检查程序集的 PublicKeyToken。我相信 .net 存在三种令牌。您可以通过查看 Windows Framework 文件夹来找到它们。这样,如果需要,您可以将程序集包含在其他文件夹中。
也就是说,我可能会要求开发人员将它们也放在同一个文件夹中。如果他们决定包含大型第三方库,例如 Infragistics 等。这样,他们必须在导入之前明确将程序集移动到文件夹中,让他们知道自己在做什么。