首页 > 解决方案 > 仅在 Windows 2012 R2 上的 DNS 解析失败

问题描述

我遇到了一个非常奇怪的错误,我已将其范围缩小到特定场景,但由于潜在的影响,我需要尝试找出原因。

为应用程序 A v 1.0 构建的 应用程序 A v 2.0 也.NET 4.7.2可以正常运行,但现在使用共享库突然导致 tcp 堆栈失败(特别是所有 DNS 解析失败,甚至是内部目标)Windows Server 2012 R2.NET 4.7.2.Net Standard 2.0

此错误仅发生在2012 R2. 2016工作得很好。即使仅包含共享库的程序集,也没有声明实际实例或进行引用,甚至没有 using 语句,只要将共享库包含在依赖项中,就会出现此错误。

在应用程序之外的 DNS 解析工作正常。FusionLogs 在加载到 myWindows 10 machine和加载到2012 R2. 唯一的区别是加载的本机图像的编码文件夹名称。

这是共享库中所有相关依赖项的列表

BouncyCastle.Crypto v 1.8.5:
    Org.BouncyCastle.Crypto.Parameters;
    Org.BouncyCastle.OpenSsl;
    Org.BouncyCastle.Security;
Common.Logging v 3.4.1:
DnsClient v 1.2.0:
Microsoft.CSharp v 4.7.0:
Mimekit v 2.4.1:
NewtonSoft.Json v 12.0.1:
System v 4.0.0.0:
    System.Collections.Generic;
    System.Collections.Concurrent;
    System.IO;
    System.IO.Compression.FileSystem;
    System.Drawing;
    System.Numerics;
    System.Runtime.Serialization;
    System.Net;
    System.Net.Http;
    System.Net.Http.Headers;
    System.Security.Cryptography;
    System.Text;
    System.Threading;
    System.Threading.Tasks;
    System.Xml;

例外:

17:16:21 [1] [Info] - DNS Query against 'google.com'

Unhandled Exception: System.Net.Sockets.SocketException: No such host is known
   at System.Net.Dns.GetAddrInfo(String name)
   at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
   at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
   at DNSAPITestApp.Tester..ctor() in ...
   at DNSAPITestApp.Program.Main(String[] args) in ...

我已经在网上进行了广泛的搜索,但是有太多类似 DNS 问题的白噪声仍然与这种特定情况或为什么会发生这种情况无关(同样重要的是如何确认任何理论)。

任何帮助将不胜感激。我不能发布很多代码,但是如果有任何特定区域使用了任何人都希望看到的特定依赖项,我可以添加代码片段。

标签: dnswindows-server-2012-r2.net-standard.net-4.7.2

解决方案


答案归功于MSDN上的 CoolDadTx

库名称是问题所在。当您编译该库时,它是 DnsApi.dll。这恰好与包含 DNS 本机逻辑的 Windows DLL 同名。当它尝试加载系统 DLL 时,它会找到您的,因为它首先搜索应用程序目录,然后尝试使用它,但当然,它不起作用。

将类库重命名为其他名称,然后重试。


推荐阅读