mirror of https://github.com/icedream/npsharp.git
Adding file transfer test app. Acts like an HTTP server.
parent
6555e2f24d
commit
03f0ef112f
|
@ -14,6 +14,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{587B7B
|
||||||
.nuget\NuGet.targets = .nuget\NuGet.targets
|
.nuget\NuGet.targets = .nuget\NuGet.targets
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "npfile", "src\npfile\npfile.csproj", "{19EBF339-E076-4962-A671-5B44A978687D}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -28,6 +30,10 @@ Global
|
||||||
{7887D77B-3C79-44C5-AB80-944B191321BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{7887D77B-3C79-44C5-AB80-944B191321BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{7887D77B-3C79-44C5-AB80-944B191321BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{7887D77B-3C79-44C5-AB80-944B191321BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{7887D77B-3C79-44C5-AB80-944B191321BB}.Release|Any CPU.Build.0 = Release|Any CPU
|
{7887D77B-3C79-44C5-AB80-944B191321BB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{19EBF339-E076-4962-A671-5B44A978687D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{19EBF339-E076-4962-A671-5B44A978687D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{19EBF339-E076-4962-A671-5B44A978687D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{19EBF339-E076-4962-A671-5B44A978687D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=HTTP/@EntryIndexedValue">HTTP</s:String>
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ID/@EntryIndexedValue">ID</s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ID/@EntryIndexedValue">ID</s:String>
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NP/@EntryIndexedValue">NP</s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NP/@EntryIndexedValue">NP</s:String>
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NPID/@EntryIndexedValue">NPID</s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NPID/@EntryIndexedValue">NPID</s:String>
|
||||||
|
|
|
@ -160,7 +160,7 @@ namespace NPSharp
|
||||||
var result = (StorageUserFileMessage) packet;
|
var result = (StorageUserFileMessage) packet;
|
||||||
if (result.Result != 0)
|
if (result.Result != 0)
|
||||||
{
|
{
|
||||||
tcs.SetException(new NpFileException());
|
tcs.SetException(new NpFileException(result.Result));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
tcs.SetResult(result.FileData);
|
tcs.SetResult(result.FileData);
|
||||||
|
@ -198,7 +198,7 @@ namespace NPSharp
|
||||||
var result = (StoragePublisherFileMessage) packet;
|
var result = (StoragePublisherFileMessage) packet;
|
||||||
if (result.Result != 0)
|
if (result.Result != 0)
|
||||||
{
|
{
|
||||||
tcs.SetException(new NpFileException());
|
tcs.SetException(new NpFileException(result.Result));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
tcs.SetResult(result.FileData);
|
tcs.SetResult(result.FileData);
|
||||||
|
|
|
@ -7,8 +7,13 @@ namespace NPSharp
|
||||||
{
|
{
|
||||||
class NpFileException : Exception
|
class NpFileException : Exception
|
||||||
{
|
{
|
||||||
public NpFileException()
|
internal NpFileException(int error)
|
||||||
:base(@"Could not fetch file from NP server.")
|
: base(error == 1 ? @"File not found on NP server" : @"Internal error on NP server")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
internal NpFileException()
|
||||||
|
: base(@"Could not fetch file from NP server.")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||||
|
</startup>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,196 @@
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using log4net;
|
||||||
|
using log4net.Appender;
|
||||||
|
using log4net.Config;
|
||||||
|
using log4net.Core;
|
||||||
|
using log4net.Layout;
|
||||||
|
using NPSharp.Authentication;
|
||||||
|
using uhttpsharp;
|
||||||
|
using uhttpsharp.Handlers;
|
||||||
|
using uhttpsharp.Headers;
|
||||||
|
using uhttpsharp.Listeners;
|
||||||
|
using uhttpsharp.RequestProviders;
|
||||||
|
|
||||||
|
namespace NPSharp.CommandLine.File
|
||||||
|
{
|
||||||
|
class Program
|
||||||
|
{
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
// log4net setup
|
||||||
|
var appender = new ColoredConsoleAppender
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
Threshold = Level.Debug,
|
||||||
|
#else
|
||||||
|
Threshold = Level.Info,
|
||||||
|
#endif
|
||||||
|
Layout = new PatternLayout("<%d{HH:mm:ss}> [%logger:%thread] %level: %message%newline"),
|
||||||
|
};
|
||||||
|
appender.AddMapping(new ColoredConsoleAppender.LevelColors { Level = Level.Debug, ForeColor = ColoredConsoleAppender.Colors.Cyan | ColoredConsoleAppender.Colors.HighIntensity });
|
||||||
|
appender.AddMapping(new ColoredConsoleAppender.LevelColors { Level = Level.Info, ForeColor = ColoredConsoleAppender.Colors.Green | ColoredConsoleAppender.Colors.HighIntensity });
|
||||||
|
appender.AddMapping(new ColoredConsoleAppender.LevelColors { Level = Level.Warn, ForeColor = ColoredConsoleAppender.Colors.Purple | ColoredConsoleAppender.Colors.HighIntensity });
|
||||||
|
appender.AddMapping(new ColoredConsoleAppender.LevelColors { Level = Level.Error, ForeColor = ColoredConsoleAppender.Colors.Red | ColoredConsoleAppender.Colors.HighIntensity });
|
||||||
|
appender.AddMapping(new ColoredConsoleAppender.LevelColors { Level = Level.Fatal, ForeColor = ColoredConsoleAppender.Colors.White | ColoredConsoleAppender.Colors.HighIntensity, BackColor = ColoredConsoleAppender.Colors.Red });
|
||||||
|
appender.ActivateOptions();
|
||||||
|
BasicConfigurator.Configure(new IAppender[] { appender, new DebugAppender { Layout = appender.Layout, Threshold = Level.All } });
|
||||||
|
|
||||||
|
var log = LogManager.GetLogger("Main");
|
||||||
|
|
||||||
|
// Arguments
|
||||||
|
if (args.Length < 4)
|
||||||
|
{
|
||||||
|
log.ErrorFormat("Needs 4 arguments: nphostname npport username password [httpport]");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var hostname = args[0];
|
||||||
|
var port = ushort.Parse(args[1]);
|
||||||
|
var username = args[2];
|
||||||
|
var password = args[3];
|
||||||
|
var hport = args.Length > 4 ? ushort.Parse(args[4]) : 5680;
|
||||||
|
|
||||||
|
// NP connection setup
|
||||||
|
log.DebugFormat("Connecting to {0}:{1}...", hostname, port);
|
||||||
|
var np = new NPClient(hostname, port);
|
||||||
|
if (!np.Connect())
|
||||||
|
{
|
||||||
|
log.Error("Connection to NP server failed.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
log.Info("NP connection successful, authenticating...");
|
||||||
|
|
||||||
|
// Get session token
|
||||||
|
var ah = new AuthenticationHelper(hostname);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ah.Authenticate(username, password);
|
||||||
|
np.AuthenticateWithToken(ah.SessionToken).Wait();
|
||||||
|
log.Info("NP authentication successful.");
|
||||||
|
}
|
||||||
|
catch (Exception err)
|
||||||
|
{
|
||||||
|
np.Disconnect();
|
||||||
|
#if DEBUG
|
||||||
|
log.ErrorFormat("Could not authenticate: {0}", err);
|
||||||
|
#else
|
||||||
|
log.ErrorFormat("Could not authenticate: {0}", err.Message);
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// HTTP server
|
||||||
|
using (var httpServer = new HttpServer(new HttpRequestProvider()))
|
||||||
|
{
|
||||||
|
log.Info("Starting up HTTP server...");
|
||||||
|
httpServer.Use(new TcpListenerAdapter(new TcpListener(IPAddress.Any, hport)));
|
||||||
|
httpServer.Use(new HttpRouter()
|
||||||
|
.With("user", new NP2HTTPUserFileHandler(np))
|
||||||
|
.With("pub", new NP2HTTPPublisherFileHandler(np))
|
||||||
|
);
|
||||||
|
httpServer.Use(new AnonymousHttpRequestHandler((context, next) =>
|
||||||
|
{
|
||||||
|
context.Response = new HttpResponse(HttpResponseCode.NotFound, "File not found", context.Request.Headers.KeepAliveConnection());
|
||||||
|
return Task.Factory.GetCompleted();
|
||||||
|
}));
|
||||||
|
httpServer.Start();
|
||||||
|
log.InfoFormat("HTTP server now running on port {0}.", hport);
|
||||||
|
log.InfoFormat("Access publisher files through http://{0}:{1}/pub/<file>", IPAddress.Any, hport);
|
||||||
|
log.InfoFormat("Access user files through http://{0}:{1}/user/<file>", IPAddress.Any, hport);
|
||||||
|
Thread.Sleep(Timeout.Infinite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class NP2HTTPUserFileHandler : IHttpRequestHandler
|
||||||
|
{
|
||||||
|
private readonly NPClient _np;
|
||||||
|
private readonly ILog _log;
|
||||||
|
|
||||||
|
public NP2HTTPUserFileHandler(NPClient np)
|
||||||
|
{
|
||||||
|
_np = np;
|
||||||
|
_log = LogManager.GetLogger(GetType());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task Handle(IHttpContext context, Func<Task> next)
|
||||||
|
{
|
||||||
|
var uri = string.Join("/", context.Request.Uri.OriginalString.Split('/').Skip(2));
|
||||||
|
|
||||||
|
var task = _np.GetUserFile(uri);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
task.Wait();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
context.Response = HttpResponse.CreateWithMessage(HttpResponseCode.NotFound, "File not accessible",
|
||||||
|
context.Request.Headers.KeepAliveConnection(),
|
||||||
|
string.Format("<pre><tt><code>{0}</code></tt></pre>", task.Exception == null ? "Unknown error" : task.Exception.ToString())
|
||||||
|
);
|
||||||
|
using (var sw = new StreamWriter(new MemoryStream()))
|
||||||
|
{
|
||||||
|
sw.WriteLine("Content-type: {0}", "text/plain");
|
||||||
|
sw.Flush();
|
||||||
|
sw.BaseStream.Position = 0;
|
||||||
|
context.Response.WriteHeaders(sw);
|
||||||
|
}
|
||||||
|
return Task.Factory.GetCompleted();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return file contents
|
||||||
|
context.Response = new HttpResponse(HttpResponseCode.Ok, System.Web.MimeMapping.GetMimeMapping(uri), new MemoryStream(task.Result), context.Request.Headers.KeepAliveConnection());
|
||||||
|
|
||||||
|
return Task.Factory.GetCompleted();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class NP2HTTPPublisherFileHandler : IHttpRequestHandler
|
||||||
|
{
|
||||||
|
private readonly NPClient _np;
|
||||||
|
private readonly ILog _log;
|
||||||
|
|
||||||
|
public NP2HTTPPublisherFileHandler(NPClient np)
|
||||||
|
{
|
||||||
|
_np = np;
|
||||||
|
_log = LogManager.GetLogger(GetType());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task Handle(IHttpContext context, Func<Task> next)
|
||||||
|
{
|
||||||
|
var uri = string.Join("/", context.Request.Uri.OriginalString.Split('/').Skip(2));
|
||||||
|
|
||||||
|
var task = _np.GetPublisherFile(uri);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
task.Wait();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
context.Response = HttpResponse.CreateWithMessage(HttpResponseCode.NotFound, "File not accessible",
|
||||||
|
context.Request.Headers.KeepAliveConnection(),
|
||||||
|
string.Format("<pre><tt><code>{0}</code></tt></pre>", task.Exception == null ? "Unknown error" : task.Exception.ToString())
|
||||||
|
);
|
||||||
|
using (var sw = new StreamWriter(new MemoryStream()))
|
||||||
|
{
|
||||||
|
sw.WriteLine("Content-type: {0}", "text/plain");
|
||||||
|
sw.Flush();
|
||||||
|
sw.BaseStream.Position = 0;
|
||||||
|
context.Response.WriteHeaders(sw);
|
||||||
|
}
|
||||||
|
return Task.Factory.GetCompleted();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return file contents
|
||||||
|
context.Response = new HttpResponse(HttpResponseCode.Ok, System.Web.MimeMapping.GetMimeMapping(uri), new MemoryStream(task.Result), context.Request.Headers.KeepAliveConnection());
|
||||||
|
|
||||||
|
return Task.Factory.GetCompleted();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
||||||
|
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
||||||
|
// die mit einer Assembly verknüpft sind.
|
||||||
|
[assembly: AssemblyTitle("npfile")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("Hewlett-Packard")]
|
||||||
|
[assembly: AssemblyProduct("npfile")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © Hewlett-Packard 2014")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
|
||||||
|
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
|
||||||
|
// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
|
||||||
|
[assembly: Guid("549e5fde-a94d-4154-9577-5743f8be3ed3")]
|
||||||
|
|
||||||
|
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
||||||
|
//
|
||||||
|
// Hauptversion
|
||||||
|
// Nebenversion
|
||||||
|
// Buildnummer
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||||
|
// übernehmen, indem Sie "*" eingeben:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,78 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{19EBF339-E076-4962-A671-5B44A978687D}</ProjectGuid>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>NPSharp.CommandLine.File</RootNamespace>
|
||||||
|
<AssemblyName>npfile</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
|
||||||
|
<RestorePackages>true</RestorePackages>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutDir>$(SolutionDir)\bin\$(Configuration)\$(Platform)\</OutDir>
|
||||||
|
<IntDir>$(SolutionDir)\obj\$(TargetName)\$(Configuration)\$(Platform)\</IntDir>
|
||||||
|
<IntermediateOutputPath>$(SolutionDir)\obj\$(TargetName)\$(Configuration)\$(Platform)\</IntermediateOutputPath>
|
||||||
|
<BaseIntermediateOutputPath>$(SolutionDir)\obj\$(TargetName)\$(Configuration)\$(Platform)\</BaseIntermediateOutputPath>
|
||||||
|
<OutputPath>$(SolutionDir)\bin\$(Configuration)\$(Platform)\</OutputPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\..\packages\log4net.2.0.3\lib\net40-full\log4net.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Newtonsoft.Json">
|
||||||
|
<HintPath>..\..\packages\Newtonsoft.Json.5.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Web" />
|
||||||
|
<Reference Include="uhttpsharp">
|
||||||
|
<HintPath>..\..\packages\uHttpSharp.0.1.4.7\lib\net40\uhttpsharp.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\libnpsharp\libnpsharp.csproj">
|
||||||
|
<Project>{1a5ac63a-250e-4bc8-b81a-822ac31f5e37}</Project>
|
||||||
|
<Name>libnpsharp</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="log4net" version="2.0.3" targetFramework="net45" />
|
||||||
|
<package id="Newtonsoft.Json" version="5.0.8" targetFramework="net45" />
|
||||||
|
<package id="uHttpSharp" version="0.1.4.7" targetFramework="net45" />
|
||||||
|
</packages>
|
|
@ -1,6 +1,14 @@
|
||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<startup>
|
<startup>
|
||||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||||
</startup>
|
</startup>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
</configuration>
|
</configuration>
|
|
@ -33,6 +33,7 @@ namespace NPSharp.CommandLine.MOTD
|
||||||
|
|
||||||
var log = LogManager.GetLogger("Main");
|
var log = LogManager.GetLogger("Main");
|
||||||
|
|
||||||
|
// Arguments
|
||||||
if (args.Length < 4)
|
if (args.Length < 4)
|
||||||
{
|
{
|
||||||
log.ErrorFormat("Needs 4 arguments: hostname port username password");
|
log.ErrorFormat("Needs 4 arguments: hostname port username password");
|
||||||
|
|
|
@ -44,7 +44,6 @@
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="Microsoft.CSharp" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
|
|
Loading…
Reference in New Issue