Ошибка разрешения DNS только на Windows 2012 R2 - PullRequest
0 голосов
/ 17 января 2020

Я столкнулся с очень странной ошибкой, которую сузил до определенного c сценария, но из-за потенциального воздействия мне нужно попытаться выяснить, почему.

Приложение A v 1.0, созданное для .NET 4.7.2, отлично работает на 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, которые все еще не имеют ничего общего с этим конкретным сценарием c или с тем, почему это может происходить (и не менее важно, как подтвердить любые теории).

Любая помощь будет принята с благодарностью. Я не могу опубликовать большую часть кода, но если есть какие-то определенные области c, где используется определенная зависимость, которую любой хотел бы видеть, я могу добавить фрагменты.

1 Ответ

0 голосов
/ 28 января 2020

Кредит за ответ переходит к CoolDadTx через MSDN

Имя библиотеки является проблемой. Когда вы компилируете эту библиотеку, это DnsApi.dll. Это имя совпадает с именем Windows DLL, которая содержит собственную логику DNS c. Когда он пытается загрузить системную DLL, он находит вашу, потому что сначала он ищет каталог приложения, а затем пытается его использовать, но, конечно, он не работает.

Переименуйте библиотеку классов во что-то другое и попробуйте еще раз.

...