如何引用特定的DLL以获得所述DLL

时间:2018-12-21 11:38:24

标签: c#-3.0 clr

美好的一天,

我有一个开发的应用程序,可以在两台机器(“站点”和“服务器”)之间传输文件。此应用程序已设置为以dotNet 3.5为目标。此外,我正在使用Renci.SshNet处理计算机之间的连接以及所述文件的传输。

我目前面临的问题是大约70%的“站点”计算机没有标准的dotNet,而且它已经很旧了。因此,由于外部dll调用System.Threading.WaitHandle.WaitOne()System.Threading.WaitHandle.WaitAny(WaitHandle[], Int32)以及这些方法的其他重载,因此这些机器不支持所有必需的功能。

尽管如此,我要解决的方法是安装netfx20SP2或netfx30SP1,但是我无法在所有计算机上执行此更新,因为它们分散在全国各地并且具有数据限制(带宽和上限)。 / p>

我可能想要做的是嵌入我下载的System.Threading dll,然后应用程序应改为使用这些类,或者将应用程序指向使用该dll的地方。

这是否完全可能,还是您必须将dll加载到GAC中?而且,有可能在系统本身处于较低框架版本时在应用程序中“运行”较高版本的System.Threading。某件事告诉我,最好的选择是实际运行Service Pack安装以避免不必要的编码,但是我不确定确切如何实现此目的。

在此先感谢您的帮助/建议, 京东

1 个答案:

答案 0 :(得分:0)

允许执行以.Net 4为目标的应用程序;虽然计算机本身仅安装了.Net 3.5,但可以重定向Windows以检查本地(正在执行)目录中是否包含应将所需符号加载到内存中的dll而不是在执行时加载的默认符号(默认是安装在计算机上的NetFx-我相信可以在执行开始时加载时找到该框架的最高版本,或者是低于或等于目标框架的最高可用版本。)

该文件的内容(myApp.exe.local)被忽略。只是告诉Windows 在该文件夹中查找适用的符号,如果找不到,系统将回滚以尝试从NetFx目录中加载这些符号。

在Microsoft Dev Center-Docs中了解更多信息(链接附在下面的段落中,该段落是本文档一部分的复制粘贴)。

To use DLL redirection, create a redirection file for your application. The redirection file must be named as follows: App_name.local. For example, if the application name is Editor.exe, the redirection file should be named Editor.exe.local. You must install the .local file in the application directory. You must also install the DLLs in the application directory.