2017-02-01 2 views
3

Я пытаюсь разработать функцию для ping ПК в сети в приложении .Net Core..Net Core Ping Class - System.Net.Ping или System.Net.Utilities

В соответствии с этим StackOverflow, он говорит, что мне нужно использовать System.Net.Utilities NuGet.

Мой project.json

{ 
    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "version": "1.1.0", 
     "type": "platform" 
    }, 
    "BundlerMinifier.Core": "2.2.306", 
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final", 
    "Microsoft.AspNetCore.StaticFiles": "1.1.0", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.0", 
    "Microsoft.Extensions.Configuration.Json": "1.1.0", 
    "Microsoft.Extensions.Logging": "1.1.0", 
    "Microsoft.Extensions.Logging.Console": "1.1.0", 
    "Microsoft.Extensions.Logging.Debug": "1.1.0", 
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.1.0", 
    "Microsoft.AspNetCore.Diagnostics": "1.1.0", 
    "Microsoft.AspNetCore.Razor.Tools": "1.1.0-preview4-final", 
    "Microsoft.AspNetCore.Routing": "1.1.0", 
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0", 
    "Dapper": "1.50.2", 
    "Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final", 
    "Microsoft.EntityFrameworkCore.SqlServer": "1.1.0", 
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.1.0", 
    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": "1.1.0-preview4-final", 
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": "1.1.0-preview4-final", 
    "Microsoft.AspNetCore.Session": "1.1.0", 
    "AutoMapper": "5.2.0", 
    "Microsoft.AspNetCore.Mvc": "1.1.1", 
    "System.Net.Utilities": "4.0.0-beta-23516" 
    }, 

    "tools": { 
    "Microsoft.AspNetCore.Razor.Tools": "1.1.0-preview4-final", 
    "Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final", 
    "BundlerMinifier.Core": "2.2.306", 
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final", 
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { 
     "version": "1.1.0-preview4-final", 
     "imports": [ 
     "portable-net45+win8+wp8+wpa81" 
     ] 
    } 
    }, 

    "frameworks": { 
    "netcoreapp1.1": { 
     "imports": [ 
     "dotnet5.6", 
     "portable-net45+win81" 
     ] 
    } 
    } 
} 

Он добавил библиотеку, я мог бы построить без каких-либо ошибок. Но во время выполнения, я получаю эту ошибку:

FileNotFoundException: Could not load file or assembly 'System.Net.Utilities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. 

Unknown location 
ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. 

System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) 

Однако, если я использую System.Net.Ping NuGet, тот же код работает без каких-либо ошибок, и я мог пинговать хост.

Согласно VS2015 Intellisense, предлагается добавить пакет System.Net.Utilities, который не работает.

Я смущен, и я не мог понять, почему я получаю эту ошибку при использовании System.Net.Utilities. Обычно, если он несовместим с .Net Core, мы сразу получили исходную ошибку/неудачную компиляцию. Но на этот раз, это совершенно другое, и я не мог просматривать любую страницу вообще.

Если в случае, вот мой код Пин ...

public async Task<double> PingPC(string host, int echoNum) 
     {    
      long totalTime = 0; 
      int timeout = 120; 
      Ping pingSender = new Ping(); 

      for (int i = 0; i < echoNum; i++) 
      { 
       var reply = await pingSender.SendPingAsync(host, timeout); 
       if (reply.Status == IPStatus.Success) 
       { 
        totalTime += reply.RoundtripTime; 
       } 
      } 
      return totalTime/echoNum; 
     } 

Не могли бы вы предложить то, что я делаю неправильно? Благодарю.

ответ

1

Чтобы получить эту версию System.Net.Utilities, работающих с VS 2015, вы должны добавить dnxcore50 в разделе импорта:

"netcoreapp1.1": { 
    "imports": [ 
    "dnxcore50", 
    "dotnet5.6", 
    "portable-net45+win81" 
    ] 
} 

Если вы решите пойти с VS 2017 года, согласно этой статье: http://www.natemcmaster.com/blog/2017/01/19/project-json-to-csproj/#imports , вы должны изменить свой csproj и добавьте эту строку в PropertyGroup:

<PackageTargetFallback>dnxcore50</PackageTargetFallback> 

у вас есть рабочий пример с VS2017 здесь: https://github.com/trenoncourt/ping-netcore

Смежные вопросы