Browse Source

Merge pull request #415 from kimw/master

added 2 features
tags/3.0
Gang Zhuo 8 years ago
parent
commit
3c76238341
11 changed files with 135 additions and 113 deletions
  1. +24
    -12
      shadowsocks-csharp/Controller/FileManager.cs
  2. +54
    -10
      shadowsocks-csharp/Controller/Logging.cs
  3. +1
    -1
      shadowsocks-csharp/Controller/Service/PACServer.cs
  4. +1
    -1
      shadowsocks-csharp/Controller/Service/UpdateChecker.cs
  5. +9
    -3
      shadowsocks-csharp/Controller/ShadowsocksController.cs
  6. +4
    -36
      shadowsocks-csharp/Model/Configuration.cs
  7. +14
    -13
      shadowsocks-csharp/Model/Server.cs
  8. +4
    -4
      shadowsocks-csharp/View/MenuViewController.cs
  9. +2
    -2
      shadowsocks-csharp/app.config
  10. +10
    -10
      shadowsocks-csharp/packages.config
  11. +12
    -21
      shadowsocks-csharp/shadowsocks-csharp.csproj

+ 24
- 12
shadowsocks-csharp/Controller/FileManager.cs View File

@@ -1,8 +1,6 @@
using System; using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.IO.Compression; using System.IO.Compression;
using System.Text;
namespace Shadowsocks.Controller namespace Shadowsocks.Controller
{ {
@@ -12,9 +10,7 @@ namespace Shadowsocks.Controller
{ {
try try
{ {
System.IO.FileStream _FileStream =
new System.IO.FileStream(fileName, System.IO.FileMode.Create,
System.IO.FileAccess.Write);
FileStream _FileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write);
_FileStream.Write(content, 0, content.Length); _FileStream.Write(content, 0, content.Length);
_FileStream.Close(); _FileStream.Close();
return true; return true;
@@ -31,7 +27,7 @@ namespace Shadowsocks.Controller
{ {
FileStream destinationFile = File.Create(fileName); FileStream destinationFile = File.Create(fileName);
// Because the uncompressed size of the file is unknown,
// Because the uncompressed size of the file is unknown,
// we are using an arbitrary buffer size. // we are using an arbitrary buffer size.
byte[] buffer = new byte[4096]; byte[] buffer = new byte[4096];
int n; int n;
@@ -39,17 +35,33 @@ namespace Shadowsocks.Controller
using (GZipStream input = new GZipStream(new MemoryStream(content), using (GZipStream input = new GZipStream(new MemoryStream(content),
CompressionMode.Decompress, false)) CompressionMode.Decompress, false))
{ {
while (true)
while ((n = input.Read(buffer, 0, buffer.Length)) > 0)
{ {
n = input.Read(buffer, 0, buffer.Length);
if (n == 0)
{
break;
}
destinationFile.Write(buffer, 0, n); destinationFile.Write(buffer, 0, n);
} }
} }
destinationFile.Close(); destinationFile.Close();
} }
public static void CompressFile(string fileName, byte[] content)
{
FileStream destinationFile = File.Create(fileName);
MemoryStream ms = new MemoryStream(content);
// Because the compressed size of the file is unknown,
// we are using an arbitrary buffer size.
byte[] buffer = new byte[4096];
int n;
using (GZipStream output = new GZipStream(destinationFile,
CompressionMode.Compress, false))
{
while ((n = ms.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, n);
}
}
destinationFile.Close();
}
} }
} }

+ 54
- 10
shadowsocks-csharp/Controller/Logging.cs View File

@@ -9,18 +9,29 @@ namespace Shadowsocks.Controller
{ {
public class Logging public class Logging
{ {
public static string LogFile;
public static string LogFilePath;
private static DateTime LogFileCreationTime;
public static bool OpenLogFile() public static bool OpenLogFile()
{ {
try try
{ {
LogFile = Utils.GetTempPath("shadowsocks.log");
FileStream fs = new FileStream(LogFile, FileMode.Append);
StreamWriterWithTimestamp sw = new StreamWriterWithTimestamp(fs);
sw.AutoFlush = true;
Console.SetOut(sw);
Console.SetError(sw);
LogFilePath = Utils.GetTempPath("shadowsocks.log");
if (!File.Exists(LogFilePath))
using (File.Create(LogFilePath)) { }
LogFileCreationTime = File.GetCreationTime(LogFilePath);
if ((DateTime.Now - LogFileCreationTime).Days >= 1)
RollLogFile();
else
{
FileStream fs = new FileStream(LogFilePath, FileMode.Append);
StreamWriterWithTimestamp sw = new StreamWriterWithTimestamp(fs);
sw.AutoFlush = true;
Console.SetOut(sw);
Console.SetError(sw);
}
return true; return true;
} }
@@ -31,20 +42,53 @@ namespace Shadowsocks.Controller
} }
} }
private static void RollLogFile()
{
Console.Out.Close();
Console.Error.Close();
MemoryStream ms = new MemoryStream();
StreamWriterWithTimestamp sw = new StreamWriterWithTimestamp(ms);
sw.AutoFlush = true;
Console.SetOut(sw);
Console.SetError(sw);
byte[] logContents = File.ReadAllBytes(LogFilePath);
string datestr = DateTime.Now.AddDays(-1).ToString("yyyyMMdd");
string filepath = Utils.GetTempPath($"shadowsocks.{datestr}.log.zip");
FileManager.CompressFile(filepath, logContents);
File.Delete(LogFilePath);
FileStream fs = new FileStream(LogFilePath, FileMode.CreateNew);
LogFileCreationTime = DateTime.Now;
ms.CopyTo(fs);
StreamWriterWithTimestamp sw2 = new StreamWriterWithTimestamp(fs);
sw2.AutoFlush = true;
Console.SetOut(sw2);
Console.SetError(sw2);
}
private static void WriteToLogFile(object o)
{
if ((DateTime.Now - LogFileCreationTime).Days >= 1)
RollLogFile();
Console.WriteLine(o);
}
public static void Error(object o) public static void Error(object o)
{ {
Console.WriteLine("[E] " + o);
WriteToLogFile("[E] " + o);
} }
public static void Info(object o) public static void Info(object o)
{ {
Console.WriteLine(o);
WriteToLogFile(o);
} }
public static void Debug(object o) public static void Debug(object o)
{ {
#if DEBUG #if DEBUG
Console.WriteLine("[D] " + o);
WriteToLogFile("[D] " + o);
#endif #endif
} }


+ 1
- 1
shadowsocks-csharp/Controller/Service/PACServer.cs View File

@@ -147,7 +147,7 @@ Connection: Close
", Encoding.UTF8.GetBytes(pac).Length) + pac; ", Encoding.UTF8.GetBytes(pac).Length) + pac;
byte[] response = Encoding.UTF8.GetBytes(text); byte[] response = Encoding.UTF8.GetBytes(text);
socket.BeginSend(response, 0, response.Length, 0, new AsyncCallback(SendCallback), socket); socket.BeginSend(response, 0, response.Length, 0, new AsyncCallback(SendCallback), socket);
Util.Utils.ReleaseMemory(true);
Utils.ReleaseMemory(true);
} }
catch (Exception e) catch (Exception e)
{ {


+ 1
- 1
shadowsocks-csharp/Controller/Service/UpdateChecker.cs View File

@@ -23,7 +23,7 @@ namespace Shadowsocks.Controller
public string LatestVersionLocalName; public string LatestVersionLocalName;
public event EventHandler CheckUpdateCompleted; public event EventHandler CheckUpdateCompleted;
public const string Version = "2.5.8.1";
public const string Version = "2.5.8.2";
private class CheckUpdateTimer : System.Timers.Timer private class CheckUpdateTimer : System.Timers.Timer
{ {


+ 9
- 3
shadowsocks-csharp/Controller/ShadowsocksController.cs View File

@@ -63,6 +63,8 @@ namespace Shadowsocks.Controller
public ShadowsocksController() public ShadowsocksController()
{ {
_config = Configuration.Load(); _config = Configuration.Load();
inboundCounter = _config.GetCurrentServer().bandwidthIn;
outboundCounter = _config.GetCurrentServer().bandwidthOut;
StatisticsConfiguration = StatisticsStrategyConfiguration.Load(); StatisticsConfiguration = StatisticsStrategyConfiguration.Load();
_strategyManager = new StrategyManager(this); _strategyManager = new StrategyManager(this);
StartReleasingMemory(); StartReleasingMemory();
@@ -253,7 +255,7 @@ namespace Shadowsocks.Controller
public static string GetQRCode(Server server) public static string GetQRCode(Server server)
{ {
string parts = server.method + ":" + server.password + "@" + server.server + ":" + server.server_port; string parts = server.method + ":" + server.password + "@" + server.server + ":" + server.server_port;
string base64 = System.Convert.ToBase64String(Encoding.UTF8.GetBytes(parts));
string base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(parts));
return "ss://" + base64; return "ss://" + base64;
} }
@@ -310,17 +312,21 @@ namespace Shadowsocks.Controller
public void UpdateInboundCounter(long n) public void UpdateInboundCounter(long n)
{ {
Interlocked.Add(ref inboundCounter, n); Interlocked.Add(ref inboundCounter, n);
_config.GetCurrentServer().bandwidthIn = inboundCounter;
} }
public void UpdateOutboundCounter(long n) public void UpdateOutboundCounter(long n)
{ {
Interlocked.Add(ref outboundCounter, n); Interlocked.Add(ref outboundCounter, n);
_config.GetCurrentServer().bandwidthOut = outboundCounter;
} }
protected void Reload() protected void Reload()
{ {
// some logic in configuration updated the config when saving, we need to read it again // some logic in configuration updated the config when saving, we need to read it again
_config = Configuration.Load(); _config = Configuration.Load();
inboundCounter = _config.GetCurrentServer().bandwidthIn;
outboundCounter = _config.GetCurrentServer().bandwidthOut;
StatisticsConfiguration = StatisticsStrategyConfiguration.Load(); StatisticsConfiguration = StatisticsStrategyConfiguration.Load();
if (polipoRunner == null) if (polipoRunner == null)
@@ -398,7 +404,7 @@ namespace Shadowsocks.Controller
} }
UpdateSystemProxy(); UpdateSystemProxy();
Util.Utils.ReleaseMemory(true);
Utils.ReleaseMemory(true);
} }
protected void SaveConfig(Configuration newConfig) protected void SaveConfig(Configuration newConfig)
@@ -494,7 +500,7 @@ namespace Shadowsocks.Controller
{ {
while (true) while (true)
{ {
Util.Utils.ReleaseMemory(false);
Utils.ReleaseMemory(false);
Thread.Sleep(30 * 1000); Thread.Sleep(30 * 1000);
} }
} }


+ 4
- 36
shadowsocks-csharp/Model/Configuration.cs View File

@@ -31,13 +31,9 @@ namespace Shadowsocks.Model
public Server GetCurrentServer() public Server GetCurrentServer()
{ {
if (index >= 0 && index < configs.Count) if (index >= 0 && index < configs.Count)
{
return configs[index]; return configs[index];
}
else else
{
return GetDefaultServer(); return GetDefaultServer();
}
} }
public static void CheckServer(Server server) public static void CheckServer(Server server)
@@ -55,24 +51,15 @@ namespace Shadowsocks.Model
Configuration config = JsonConvert.DeserializeObject<Configuration>(configContent); Configuration config = JsonConvert.DeserializeObject<Configuration>(configContent);
config.isDefault = false; config.isDefault = false;
if (config.localPort == 0) if (config.localPort == 0)
{
config.localPort = 1080; config.localPort = 1080;
}
if (config.index == -1)
{
if (config.strategy == null)
{
config.index = 0;
}
}
if (config.index == -1 && config.strategy == null)
config.index = 0;
return config; return config;
} }
catch (Exception e) catch (Exception e)
{ {
if (!(e is FileNotFoundException)) if (!(e is FileNotFoundException))
{
Logging.LogUsefulException(e); Logging.LogUsefulException(e);
}
return new Configuration return new Configuration
{ {
index = 0, index = 0,
@@ -90,20 +77,11 @@ namespace Shadowsocks.Model
public static void Save(Configuration config) public static void Save(Configuration config)
{ {
if (config.index >= config.configs.Count) if (config.index >= config.configs.Count)
{
config.index = config.configs.Count - 1; config.index = config.configs.Count - 1;
}
if (config.index < -1) if (config.index < -1)
{
config.index = -1; config.index = -1;
}
if (config.index == -1)
{
if (config.strategy == null)
{
config.index = 0;
}
}
if (config.index == -1 && config.strategy == null)
config.index = 0;
config.isDefault = false; config.isDefault = false;
try try
{ {
@@ -128,42 +106,32 @@ namespace Shadowsocks.Model
private static void Assert(bool condition) private static void Assert(bool condition)
{ {
if (!condition) if (!condition)
{
throw new Exception(I18N.GetString("assertion failure")); throw new Exception(I18N.GetString("assertion failure"));
}
} }
public static void CheckPort(int port) public static void CheckPort(int port)
{ {
if (port <= 0 || port > 65535) if (port <= 0 || port > 65535)
{
throw new ArgumentException(I18N.GetString("Port out of range")); throw new ArgumentException(I18N.GetString("Port out of range"));
}
} }
public static void CheckLocalPort(int port) public static void CheckLocalPort(int port)
{ {
CheckPort(port); CheckPort(port);
if (port == 8123) if (port == 8123)
{
throw new ArgumentException(I18N.GetString("Port can't be 8123")); throw new ArgumentException(I18N.GetString("Port can't be 8123"));
}
} }
private static void CheckPassword(string password) private static void CheckPassword(string password)
{ {
if (string.IsNullOrEmpty(password)) if (string.IsNullOrEmpty(password))
{
throw new ArgumentException(I18N.GetString("Password can not be blank")); throw new ArgumentException(I18N.GetString("Password can not be blank"));
}
} }
private static void CheckServer(string server) private static void CheckServer(string server)
{ {
if (string.IsNullOrEmpty(server)) if (string.IsNullOrEmpty(server))
{
throw new ArgumentException(I18N.GetString("Server IP can not be blank")); throw new ArgumentException(I18N.GetString("Server IP can not be blank"));
}
} }
} }
} }

+ 14
- 13
shadowsocks-csharp/Model/Server.cs View File

@@ -15,6 +15,8 @@ namespace Shadowsocks.Model
public string method; public string method;
public string remarks; public string remarks;
public bool auth; public bool auth;
public long bandwidthIn;
public long bandwidthOut;
public override int GetHashCode() public override int GetHashCode()
{ {
@@ -24,7 +26,7 @@ namespace Shadowsocks.Model
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
Server o2 = (Server)obj; Server o2 = (Server)obj;
return this.server == o2.server && this.server_port == o2.server_port;
return server == o2.server && server_port == o2.server_port;
} }
public string FriendlyName() public string FriendlyName()
@@ -45,12 +47,12 @@ namespace Shadowsocks.Model
public Server() public Server()
{ {
this.server = "";
this.server_port = 8388;
this.method = "aes-256-cfb";
this.password = "";
this.remarks = "";
this.auth = false;
server = "";
server_port = 8388;
method = "aes-256-cfb";
password = "";
remarks = "";
auth = false;
} }
public Server(string ssURL) : this() public Server(string ssURL) : this()
@@ -62,7 +64,7 @@ namespace Shadowsocks.Model
{ {
try try
{ {
bytes = System.Convert.FromBase64String(base64);
bytes = Convert.FromBase64String(base64);
} }
catch (FormatException) catch (FormatException)
{ {
@@ -80,16 +82,15 @@ namespace Shadowsocks.Model
string afterAt = data.Substring(indexLastAt + 1); string afterAt = data.Substring(indexLastAt + 1);
int indexLastColon = afterAt.LastIndexOf(':'); int indexLastColon = afterAt.LastIndexOf(':');
this.server_port = int.Parse(afterAt.Substring(indexLastColon + 1));
this.server = afterAt.Substring(0, indexLastColon);
server_port = int.Parse(afterAt.Substring(indexLastColon + 1));
server = afterAt.Substring(0, indexLastColon);
string beforeAt = data.Substring(0, indexLastAt); string beforeAt = data.Substring(0, indexLastAt);
string[] parts = beforeAt.Split(new[] { ':' }); string[] parts = beforeAt.Split(new[] { ':' });
this.method = parts[0];
this.password = parts[1];
method = parts[0];
password = parts[1];
//TODO: read one_time_auth //TODO: read one_time_auth
} }
catch (IndexOutOfRangeException) catch (IndexOutOfRangeException)
{ {


+ 4
- 4
shadowsocks-csharp/View/MenuViewController.cs View File

@@ -11,6 +11,7 @@ using ZXing.QrCode;
using Shadowsocks.Controller; using Shadowsocks.Controller;
using Shadowsocks.Model; using Shadowsocks.Model;
using Shadowsocks.Properties; using Shadowsocks.Properties;
using Shadowsocks.Util;
namespace Shadowsocks.View namespace Shadowsocks.View
{ {
@@ -341,7 +342,6 @@ namespace Shadowsocks.View
{ {
item.Checked = true; item.Checked = true;
} }
} }
} }
@@ -363,7 +363,7 @@ namespace Shadowsocks.View
{ {
if (logForms.Count == 0) if (logForms.Count == 0)
{ {
LogForm f = new LogForm(controller, Logging.LogFile);
LogForm f = new LogForm(controller, Logging.LogFilePath);
f.Show(); f.Show();
f.FormClosed += logForm_FormClosed; f.FormClosed += logForm_FormClosed;
@@ -388,7 +388,7 @@ namespace Shadowsocks.View
void configForm_FormClosed(object sender, FormClosedEventArgs e) void configForm_FormClosed(object sender, FormClosedEventArgs e)
{ {
configForm = null; configForm = null;
Util.Utils.ReleaseMemory(true);
Utils.ReleaseMemory(true);
ShowFirstTimeBalloon(); ShowFirstTimeBalloon();
} }
@@ -491,7 +491,7 @@ namespace Shadowsocks.View
private void ShowLogItem_Click(object sender, EventArgs e) private void ShowLogItem_Click(object sender, EventArgs e)
{ {
LogForm f = new LogForm(controller, Logging.LogFile);
LogForm f = new LogForm(controller, Logging.LogFilePath);
f.Show(); f.Show();
f.FormClosed += logForm_FormClosed; f.FormClosed += logForm_FormClosed;


+ 2
- 2
shadowsocks-csharp/app.config View File

@@ -8,11 +8,11 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.6.8.0" newVersion="2.6.8.0" />
<bindingRedirect oldVersion="0.0.0.0-2.6.10.0" newVersion="2.6.10.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.6.8.0" newVersion="2.6.8.0" />
<bindingRedirect oldVersion="0.0.0.0-2.6.10.0" newVersion="2.6.10.0" />
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>


+ 10
- 10
shadowsocks-csharp/packages.config View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Costura.Fody" version="1.3.3.0" targetFramework="net4-client" developmentDependency="true" />
<package id="Fody" version="1.29.3" targetFramework="net4-client" developmentDependency="true" />
<package id="Microsoft.Bcl" version="1.1.8" targetFramework="net4-client" />
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net4-client" />
<package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net4-client" />
<package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net4-client" />
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net4-client" />
<package id="System.Net.Http" version="2.0.20710.0" targetFramework="net4-client" />
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Costura.Fody" version="1.3.3.0" targetFramework="net4-client" developmentDependency="true" />
<package id="Fody" version="1.29.4" targetFramework="net40-client" developmentDependency="true" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net40-client" />
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net40-client" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net40-client" />
<package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net4-client" />
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net40-client" />
<package id="System.Net.Http" version="2.0.20710.0" targetFramework="net40-client" />
</packages> </packages>

+ 12
- 21
shadowsocks-csharp/shadowsocks-csharp.csproj View File

@@ -69,21 +69,18 @@
<Reference Include="Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>3rd\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll</HintPath> <HintPath>3rd\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll</HintPath>
<Private>True</Private> <Private>True</Private>
<EmbedInteropTypes>False</EmbedInteropTypes>
</Reference> </Reference>
<Reference Include="Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>3rd\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.dll</HintPath> <HintPath>3rd\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.dll</HintPath>
<Private>True</Private> <Private>True</Private>
<EmbedInteropTypes>False</EmbedInteropTypes>
</Reference> </Reference>
<Reference Include="Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>3rd\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath> <HintPath>3rd\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>
<Private>True</Private> <Private>True</Private>
<EmbedInteropTypes>False</EmbedInteropTypes>
</Reference> </Reference>
<Reference Include="Microsoft.VisualBasic" /> <Reference Include="Microsoft.VisualBasic" />
<Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>3rd\Newtonsoft.Json.7.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>3rd\Newtonsoft.Json.8.0.2\lib\net40\Newtonsoft.Json.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="PresentationCore" /> <Reference Include="PresentationCore" />
@@ -91,10 +88,9 @@
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.IO, Version=2.6.8.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>3rd\Microsoft.Bcl.1.1.8\lib\net40\System.IO.dll</HintPath>
<Reference Include="System.IO, Version=2.6.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>3rd\Microsoft.Bcl.1.1.10\lib\net40\System.IO.dll</HintPath>
<Private>True</Private> <Private>True</Private>
<EmbedInteropTypes>False</EmbedInteropTypes>
</Reference> </Reference>
<Reference Include="System.Net" /> <Reference Include="System.Net" />
<Reference Include="System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
@@ -105,15 +101,13 @@
<HintPath>3rd\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.WebRequest.dll</HintPath> <HintPath>3rd\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.WebRequest.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Runtime, Version=2.6.8.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>3rd\Microsoft.Bcl.1.1.8\lib\net40\System.Runtime.dll</HintPath>
<Reference Include="System.Runtime, Version=2.6.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>3rd\Microsoft.Bcl.1.1.10\lib\net40\System.Runtime.dll</HintPath>
<Private>True</Private> <Private>True</Private>
<EmbedInteropTypes>False</EmbedInteropTypes>
</Reference> </Reference>
<Reference Include="System.Threading.Tasks, Version=2.6.8.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>3rd\Microsoft.Bcl.1.1.8\lib\net40\System.Threading.Tasks.dll</HintPath>
<Reference Include="System.Threading.Tasks, Version=2.6.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>3rd\Microsoft.Bcl.1.1.10\lib\net40\System.Threading.Tasks.dll</HintPath>
<Private>True</Private> <Private>True</Private>
<EmbedInteropTypes>False</EmbedInteropTypes>
</Reference> </Reference>
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Windows.Forms.DataVisualization" /> <Reference Include="System.Windows.Forms.DataVisualization" />
@@ -330,18 +324,15 @@
</BootstrapperPackage> </BootstrapperPackage>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="3rd\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('3rd\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
<Error Condition="!Exists('3rd\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
<Error Condition="Exists('3rd\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
</Target>
<Import Project="3rd\Fody.1.29.3\build\portable-net+sl+win+wpa+wp\Fody.targets" Condition="Exists('3rd\Fody.1.29.3\build\portable-net+sl+win+wpa+wp\Fody.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('3rd\Fody.1.29.3\build\portable-net+sl+win+wpa+wp\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '3rd\Fody.1.29.3\build\portable-net+sl+win+wpa+wp\Fody.targets'))" />
<Error Condition="!Exists('3rd\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '3rd\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
<Error Condition="!Exists('3rd\Fody.1.29.4\build\portable-net+sl+win+wpa+wp\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '3rd\Fody.1.29.4\build\portable-net+sl+win+wpa+wp\Fody.targets'))" />
</Target> </Target>
<Import Project="3rd\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('3rd\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
<Import Project="3rd\Fody.1.29.4\build\portable-net+sl+win+wpa+wp\Fody.targets" Condition="Exists('3rd\Fody.1.29.4\build\portable-net+sl+win+wpa+wp\Fody.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- 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. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">


Loading…
Cancel
Save