在Windows / C#中卸载DLL

时间:2017-10-25 14:03:33

标签: c# .net windows dll version

我有一块硬件,制造商提供了一个DLL和一个示例Visual Studio项目。

我使用最新版本的DLL编写了一个基于此项目的工具,运行正常。

现在,还有其他(较旧的)工具,使用其他版本的DLL。这些工具也可以自行运行。

当我在不重新启动Windows的情况下运行两个工具(在另一个之后,而不是同时发生!)时会出现问题。

然后我得到了"版本不匹配"错误。我怀疑Windows仍然保持加载DLL,尽管首先运行的程序正确终止。

由于我无法访问"其他工具"的源代码,有没有办法

  1. 在我的程序启动时强制使用正确的版本重新加载DLL 和;
  2. 当我的程序退出时强制Windows卸载DLL
  3. 所以不会有任何问题吗?

1 个答案:

答案 0 :(得分:0)

由于您没有这些其他工具的源代码,因此您必须为要使用的每个应用程序创建一个清单文件,该文件使用的是此dll的版本。这将是一个与可执行文件同名的文件,扩展名为“.manifest”。您可以在此处找到有关应用程序清单的更多信息:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa374191%28v=vs.85%29.aspx

一旦你有了清单文件,你就可以指定加载所需的精确dll:

  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" 
                        name="Proseware.Research.SampleAssembly" 
                        version="6.0.0.0" 
                        processorArchitecture="X86" 
                        publicKeyToken="0000000000000000" 
                        language="*"
      />
    </dependentAssembly>
  </dependency>