DNS 解析仅在 Windows 2012 R2 上失败



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

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

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

在应用程序之外,DNS 解析工作正常。 FusionLogs 在我的Windows 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问题有太多的白噪声,这些问题仍然与这个特定场景或为什么会发生这种情况无关(同样重要的是如何确认任何理论(。

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

Answer 的功劳归 MSDN 的 CoolDadTx

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

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

最新更新