From 287a9ee674a30bacf8c11d9236a0288cec932412 Mon Sep 17 00:00:00 2001 From: Loning Date: Sun, 22 Dec 2013 17:28:48 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E6=9B=B4=E6=96=B0Json=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BitcoinRpcSharp/BitcoinRpcSharp.csproj | 2 +- BitcoinRpcSharp/packages.config | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/BitcoinRpcSharp/BitcoinRpcSharp.csproj b/BitcoinRpcSharp/BitcoinRpcSharp.csproj index 7569355..8618573 100644 --- a/BitcoinRpcSharp/BitcoinRpcSharp.csproj +++ b/BitcoinRpcSharp/BitcoinRpcSharp.csproj @@ -36,7 +36,7 @@ - ..\packages\Newtonsoft.Json.5.0.6\lib\net45\Newtonsoft.Json.dll + ..\..\..\src\packages\Newtonsoft.Json.5.0.8\lib\net45\Newtonsoft.Json.dll diff --git a/BitcoinRpcSharp/packages.config b/BitcoinRpcSharp/packages.config index 91e63e7..d0d007f 100644 --- a/BitcoinRpcSharp/packages.config +++ b/BitcoinRpcSharp/packages.config @@ -1,4 +1,5 @@  + \ No newline at end of file From da67195061a8fe74d214ccb4311e7bf0952aa4b4 Mon Sep 17 00:00:00 2001 From: Loning Date: Wed, 8 Jan 2014 22:40:09 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BitcoinRpcSharp/BitcoinWalletBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BitcoinRpcSharp/BitcoinWalletBase.cs b/BitcoinRpcSharp/BitcoinWalletBase.cs index a7770b2..ab4f1e0 100644 --- a/BitcoinRpcSharp/BitcoinWalletBase.cs +++ b/BitcoinRpcSharp/BitcoinWalletBase.cs @@ -76,7 +76,7 @@ private HttpWebRequest MakeHttpRequest(JsonRpcRequest jsonRpcRequest) // Important, otherwise the service can't deserialse your request properly webRequest.ContentType = "application/json-rpc"; webRequest.Method = "POST"; - webRequest.Timeout = 2000; // 2 seconds + webRequest.Timeout = 10000; // 2 seconds byte[] byteArray = jsonRpcRequest.GetBytes(); webRequest.ContentLength = byteArray.Length; From cdf2b17c89c400f417a8bfc1b4c5158c3ef01589 Mon Sep 17 00:00:00 2001 From: Loning Date: Tue, 28 Jan 2014 04:52:12 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E6=97=B6=E9=97=B4=EF=BC=8C=E4=BF=AE=E5=A4=8D=E4=BA=86?= =?UTF-8?q?=E5=87=A0=E4=B8=AAbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BitcoinRpcSharp/BitcoinWalletBase.cs | 17 ++++++++++++++++- BitcoinRpcSharp/Responses/Block.cs | 2 +- BitcoinRpcSharp/Responses/Transaction.cs | 2 ++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/BitcoinRpcSharp/BitcoinWalletBase.cs b/BitcoinRpcSharp/BitcoinWalletBase.cs index ab4f1e0..74df6dd 100644 --- a/BitcoinRpcSharp/BitcoinWalletBase.cs +++ b/BitcoinRpcSharp/BitcoinWalletBase.cs @@ -76,7 +76,7 @@ private HttpWebRequest MakeHttpRequest(JsonRpcRequest jsonRpcRequest) // Important, otherwise the service can't deserialse your request properly webRequest.ContentType = "application/json-rpc"; webRequest.Method = "POST"; - webRequest.Timeout = 10000; // 2 seconds + webRequest.Timeout = 100*1000; // 2 seconds byte[] byteArray = jsonRpcRequest.GetBytes(); webRequest.ContentLength = byteArray.Length; @@ -154,7 +154,22 @@ private string GetJsonResponse(HttpWebRequest httpWebRequest) { switch (webResponse.StatusCode) { + case HttpStatusCode.InternalServerError: + { + using (var stream = webResponse.GetResponseStream()) + using (var reader = new StreamReader(stream)) + { + string result = reader.ReadToEnd(); + reader.Close(); + + if (LogJsonResultToConsole) + { + Console.WriteLine(JsonFormatter.PrettyPrint(result)); + } + throw new BitcoinRpcException(result,webEx); + } + } throw new BitcoinRpcException("The RPC request was either not understood by the Bitcoin server or there was a problem executing the request.", webEx); } } diff --git a/BitcoinRpcSharp/Responses/Block.cs b/BitcoinRpcSharp/Responses/Block.cs index 5341426..4249ac8 100644 --- a/BitcoinRpcSharp/Responses/Block.cs +++ b/BitcoinRpcSharp/Responses/Block.cs @@ -16,7 +16,7 @@ public class Block public string MerkleRoot { get; set; } public List Tx { get; set; } public int Time { get; set; } - public int Nonce { get; set; } + public uint Nonce { get; set; } public string Bits { get; set; } public double Difficulty { get; set; } public string NextBlockHash { get; set; } diff --git a/BitcoinRpcSharp/Responses/Transaction.cs b/BitcoinRpcSharp/Responses/Transaction.cs index c3b2a23..7b75f03 100644 --- a/BitcoinRpcSharp/Responses/Transaction.cs +++ b/BitcoinRpcSharp/Responses/Transaction.cs @@ -17,5 +17,7 @@ public class Transaction public string Comment { get; set; } public string To { get; set; } public List Details { get; set; } + public string BlockHash { get; set; } + public int BlockIndex { get; set; } } } From fd5aacb3afd545a98883d8c3ab06d9670216c096 Mon Sep 17 00:00:00 2001 From: Loning Date: Sun, 23 Mar 2014 02:39:28 +0800 Subject: [PATCH 04/10] add a rpc exception to return 500 json data --- BitcoinRpcSharp/BitcoinRpcException.cs | 14 ++++++++++++++ BitcoinRpcSharp/BitcoinWalletBase.cs | 13 +++++++++++-- BitcoinRpcSharp/JsonRpcResponse.cs | 22 +++++++++++++++------- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/BitcoinRpcSharp/BitcoinRpcException.cs b/BitcoinRpcSharp/BitcoinRpcException.cs index ac8047d..51f9bb9 100644 --- a/BitcoinRpcSharp/BitcoinRpcException.cs +++ b/BitcoinRpcSharp/BitcoinRpcException.cs @@ -28,4 +28,18 @@ protected BitcoinRpcException(System.Runtime.Serialization.SerializationInfo inf { } } + + + [Serializable] + public class BitcoinRpcServerErrorException : BitcoinRpcException + { + public BitcoinRpcServerErrorException() { } + public BitcoinRpcServerErrorException(string message) : base(message) { } + public BitcoinRpcServerErrorException(string message, Exception inner) : base(message, inner) { } + protected BitcoinRpcServerErrorException( + System.Runtime.Serialization.SerializationInfo info, + System.Runtime.Serialization.StreamingContext context) + : base(info, context) { } + public JsonRpcResponse JsonObject { get; set; } + } } diff --git a/BitcoinRpcSharp/BitcoinWalletBase.cs b/BitcoinRpcSharp/BitcoinWalletBase.cs index 74df6dd..60db348 100644 --- a/BitcoinRpcSharp/BitcoinWalletBase.cs +++ b/BitcoinRpcSharp/BitcoinWalletBase.cs @@ -76,7 +76,7 @@ private HttpWebRequest MakeHttpRequest(JsonRpcRequest jsonRpcRequest) // Important, otherwise the service can't deserialse your request properly webRequest.ContentType = "application/json-rpc"; webRequest.Method = "POST"; - webRequest.Timeout = 100*1000; // 2 seconds + webRequest.Timeout = 100 * 1000; // 2 seconds byte[] byteArray = jsonRpcRequest.GetBytes(); webRequest.ContentLength = byteArray.Length; @@ -167,7 +167,16 @@ private string GetJsonResponse(HttpWebRequest httpWebRequest) { Console.WriteLine(JsonFormatter.PrettyPrint(result)); } - throw new BitcoinRpcException(result,webEx); + try + { + var obj = JsonConvert.DeserializeObject>(result); + throw new BitcoinRpcServerErrorException(result, webEx) { JsonObject = obj }; + } + catch (JsonException) + { + throw new BitcoinRpcException("The RPC request was either not understood by the Bitcoin server or there was a problem executing the request.", webEx); + } + //throw new BitcoinRpcException(result,webEx); } } throw new BitcoinRpcException("The RPC request was either not understood by the Bitcoin server or there was a problem executing the request.", webEx); diff --git a/BitcoinRpcSharp/JsonRpcResponse.cs b/BitcoinRpcSharp/JsonRpcResponse.cs index 11e853a..d535ccb 100644 --- a/BitcoinRpcSharp/JsonRpcResponse.cs +++ b/BitcoinRpcSharp/JsonRpcResponse.cs @@ -28,7 +28,7 @@ public class JsonRpcResponse /// The error returned by the wallet, if any. /// [JsonProperty(PropertyName = "error", Order = 2)] - public string Error { get; set; } + public RpcError Error { get; set; } /// /// Create a new JSON RPC response with the given id, error and result object. @@ -36,11 +36,19 @@ public class JsonRpcResponse /// The id. /// The error. /// The result object. - public JsonRpcResponse(int id, string error, T result) - { - Id = id; - Error = error; - Result = result; - } + //public JsonRpcResponse(int id, string error, T result) + //{ + // Id = id; + // Error = error; + // Result = result; + //} + } + + public class RpcError + { + [JsonProperty(PropertyName = "code")] + public int Code { get; set; } + [JsonProperty(PropertyName = "message")] + public string Message { get; set; } } } From 6988fce248ba9a2e4a94684b70df955867f9c647 Mon Sep 17 00:00:00 2001 From: Loning Date: Mon, 24 Mar 2014 22:41:46 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E5=B0=86=E5=BC=82=E5=B8=B8code=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E6=9E=9A=E4=B8=BE=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BitcoinRpcSharp/BitcoinRpcException.cs | 8 ++++++ BitcoinRpcSharp/JsonRpcResponse.cs | 39 +++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/BitcoinRpcSharp/BitcoinRpcException.cs b/BitcoinRpcSharp/BitcoinRpcException.cs index 51f9bb9..16b6181 100644 --- a/BitcoinRpcSharp/BitcoinRpcException.cs +++ b/BitcoinRpcSharp/BitcoinRpcException.cs @@ -41,5 +41,13 @@ protected BitcoinRpcServerErrorException( System.Runtime.Serialization.StreamingContext context) : base(info, context) { } public JsonRpcResponse JsonObject { get; set; } + + public RPCErrorCode RpcErrorCode + { + get + { + return JsonObject.Error.Code; + } + } } } diff --git a/BitcoinRpcSharp/JsonRpcResponse.cs b/BitcoinRpcSharp/JsonRpcResponse.cs index d535ccb..9c0f5c8 100644 --- a/BitcoinRpcSharp/JsonRpcResponse.cs +++ b/BitcoinRpcSharp/JsonRpcResponse.cs @@ -47,8 +47,45 @@ public class JsonRpcResponse public class RpcError { [JsonProperty(PropertyName = "code")] - public int Code { get; set; } + public RPCErrorCode Code { get; set; } [JsonProperty(PropertyName = "message")] public string Message { get; set; } } + + public enum RPCErrorCode + { + // Standard JSON-RPC 2.0 errors + RPC_INVALID_REQUEST = -32600, + RPC_METHOD_NOT_FOUND = -32601, + RPC_INVALID_PARAMS = -32602, + RPC_INTERNAL_ERROR = -32603, + RPC_PARSE_ERROR = -32700, + + // General application defined errors + RPC_MISC_ERROR = -1, // std::exception thrown in command handling + RPC_FORBIDDEN_BY_SAFE_MODE = -2, // Server is in safe mode, and command is not allowed in safe mode + RPC_TYPE_ERROR = -3, // Unexpected type was passed as parameter + RPC_INVALID_ADDRESS_OR_KEY = -5, // Invalid address or key + RPC_OUT_OF_MEMORY = -7, // Ran out of memory during operation + RPC_INVALID_PARAMETER = -8, // Invalid, missing or duplicate parameter + RPC_DATABASE_ERROR = -20, // Database error + RPC_DESERIALIZATION_ERROR = -22, // Error parsing or validating structure in raw format + + // P2P client errors + RPC_CLIENT_NOT_CONNECTED = -9, // Bitcoin is not connected + RPC_CLIENT_IN_INITIAL_DOWNLOAD = -10, // Still downloading initial blocks + RPC_CLIENT_NODE_ALREADY_ADDED = -23, // Node is already added + RPC_CLIENT_NODE_NOT_ADDED = -24, // Node has not been added before + + // Wallet errors + RPC_WALLET_ERROR = -4, // Unspecified problem with wallet (key not found etc.) + RPC_WALLET_INSUFFICIENT_FUNDS = -6, // Not enough funds in wallet or account + RPC_WALLET_INVALID_ACCOUNT_NAME = -11, // Invalid account name + RPC_WALLET_KEYPOOL_RAN_OUT = -12, // Keypool ran out, call keypoolrefill first + RPC_WALLET_UNLOCK_NEEDED = -13, // Enter the wallet passphrase with walletpassphrase first + RPC_WALLET_PASSPHRASE_INCORRECT = -14, // The wallet passphrase entered was incorrect + RPC_WALLET_WRONG_ENC_STATE = -15, // Command given in wrong wallet encryption state (encrypting an encrypted wallet etc.) + RPC_WALLET_ENCRYPTION_FAILED = -16, // Failed to encrypt the wallet + RPC_WALLET_ALREADY_UNLOCKED = -17, // Wallet is already unlocked + }; } From b20d9e8e97e5509abd57c5572fa1a30616544528 Mon Sep 17 00:00:00 2001 From: Loning Date: Tue, 25 Mar 2014 17:44:10 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E5=8D=87=E7=BA=A7json.net?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BitcoinRpcSharp/BitcoinRpcSharp.csproj | 5 +++-- BitcoinRpcSharp/packages.config | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/BitcoinRpcSharp/BitcoinRpcSharp.csproj b/BitcoinRpcSharp/BitcoinRpcSharp.csproj index 8618573..35eae69 100644 --- a/BitcoinRpcSharp/BitcoinRpcSharp.csproj +++ b/BitcoinRpcSharp/BitcoinRpcSharp.csproj @@ -35,8 +35,9 @@ - - ..\..\..\src\packages\Newtonsoft.Json.5.0.8\lib\net45\Newtonsoft.Json.dll + + False + ..\..\..\src\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll diff --git a/BitcoinRpcSharp/packages.config b/BitcoinRpcSharp/packages.config index d0d007f..b6cb048 100644 --- a/BitcoinRpcSharp/packages.config +++ b/BitcoinRpcSharp/packages.config @@ -1,5 +1,4 @@  - - + \ No newline at end of file From c0a9f724994f21de9fa4e90b14dce0370593cdcb Mon Sep 17 00:00:00 2001 From: Loning Date: Wed, 26 Mar 2014 15:33:43 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=8A=9B=E5=87=BA?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E6=8A=9B500=E9=94=99=E8=AF=AF=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BitcoinRpcSharp/BitcoinWalletBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BitcoinRpcSharp/BitcoinWalletBase.cs b/BitcoinRpcSharp/BitcoinWalletBase.cs index 60db348..bf89ee9 100644 --- a/BitcoinRpcSharp/BitcoinWalletBase.cs +++ b/BitcoinRpcSharp/BitcoinWalletBase.cs @@ -174,7 +174,7 @@ private string GetJsonResponse(HttpWebRequest httpWebRequest) } catch (JsonException) { - throw new BitcoinRpcException("The RPC request was either not understood by the Bitcoin server or there was a problem executing the request.", webEx); + throw new BitcoinRpcException(result, webEx); } //throw new BitcoinRpcException(result,webEx); } From fbc3217891317ac463c20c2b3d65b14f5014fd67 Mon Sep 17 00:00:00 2001 From: Loning Date: Sun, 27 Apr 2014 18:35:42 +0800 Subject: [PATCH 08/10] add error handle --- BitcoinRpcSharp/BitcoinWallet.cs | 20 +++++++++++++++++++ BitcoinRpcSharp/BitcoinWalletBase.cs | 16 ++++++++++++--- BitcoinRpcSharp/JsonRpcRequest.cs | 4 ++++ BitcoinRpcSharp/JsonRpcResponse.cs | 2 ++ .../Responses/TransactionSinceBlock.cs | 5 +++++ 5 files changed, 44 insertions(+), 3 deletions(-) diff --git a/BitcoinRpcSharp/BitcoinWallet.cs b/BitcoinRpcSharp/BitcoinWallet.cs index 08078f2..467dbd1 100644 --- a/BitcoinRpcSharp/BitcoinWallet.cs +++ b/BitcoinRpcSharp/BitcoinWallet.cs @@ -464,6 +464,26 @@ public List ListTransactions(string account = "", int count = 1 return MakeRequest>("listtransactions", account, count, from); } + public List BlockChainListTransactions(string account = "", int count = 10, int from = 0) + { + var list= MakeRequest("listtransactions", account, count, from); + return list.transactions.Select(p => new ListTransaction() + { + Account = p.Account, + Address = p.Address, + Amount = p.Amount, + BlockHash = p.BlockHash, + BlockIndex = p.BlockIndex, + BlockTime = p.BlockTime, + Category = p.Category, + Confirmations = p.Confirmations, + Generated = p.Generated, + Time = p.Time, + TimeReceived = p.TimeReceived, + TxId = p.TxId + }).ToList(); + } + /// /// Version 0.7: Returns array of unspent transaction inputs in the wallet. /// diff --git a/BitcoinRpcSharp/BitcoinWalletBase.cs b/BitcoinRpcSharp/BitcoinWalletBase.cs index bf89ee9..4d6e951 100644 --- a/BitcoinRpcSharp/BitcoinWalletBase.cs +++ b/BitcoinRpcSharp/BitcoinWalletBase.cs @@ -2,6 +2,7 @@ using System; using System.IO; using System.Net; +using System.Text; namespace BitcoinRpcSharp { @@ -63,6 +64,12 @@ private JsonRpcResponse MakeRpcRequest(JsonRpcRequest jsonRpcRequest) return GetRpcResponse(httpWebRequest); } + static void SetBasicAuthHeader(WebRequest request, String userName, String userPassword) + { + string authInfo = userName + ":" + userPassword; + authInfo = Convert.ToBase64String(Encoding.UTF8.GetBytes(authInfo)); + request.Headers["Authorization"] = "Basic " + authInfo; + } /// /// Make the actual HTTP request to the Bitcoin RPC interface. /// @@ -71,8 +78,8 @@ private JsonRpcResponse MakeRpcRequest(JsonRpcRequest jsonRpcRequest) private HttpWebRequest MakeHttpRequest(JsonRpcRequest jsonRpcRequest) { var webRequest = (HttpWebRequest)WebRequest.Create(RpcUrl); - webRequest.Credentials = new NetworkCredential(RpcUser, RpcPassword); - + //webRequest.Credentials = new NetworkCredential(RpcUser, RpcPassword); + SetBasicAuthHeader(webRequest, RpcUser, RpcPassword); // Important, otherwise the service can't deserialse your request properly webRequest.ContentType = "application/json-rpc"; webRequest.Method = "POST"; @@ -107,9 +114,12 @@ private JsonRpcResponse GetRpcResponse(HttpWebRequest httpWebRequest) { string json = GetJsonResponse(httpWebRequest); + var jsonSerializerSettings = new JsonSerializerSettings(); + jsonSerializerSettings.MissingMemberHandling = MissingMemberHandling.Ignore; + try { - return JsonConvert.DeserializeObject>(json); + return JsonConvert.DeserializeObject>(json, jsonSerializerSettings); } catch (JsonException jsonEx) { diff --git a/BitcoinRpcSharp/JsonRpcRequest.cs b/BitcoinRpcSharp/JsonRpcRequest.cs index 2841bb1..552e91a 100644 --- a/BitcoinRpcSharp/JsonRpcRequest.cs +++ b/BitcoinRpcSharp/JsonRpcRequest.cs @@ -16,6 +16,9 @@ public class JsonRpcRequest [JsonProperty(PropertyName = "method", Order = 0)] public string Method { get; set; } + [JsonProperty(PropertyName = "jsonrpc", Order = 3)] + public string JsonRpc { get; set; } + /// /// A list of parameters to pass to the method. /// @@ -39,6 +42,7 @@ public JsonRpcRequest(int id, string method, params object[] parameters) Id = id; Method = method; + JsonRpc = "2.0"; if (parameters != null) { Parameters = parameters.ToList(); diff --git a/BitcoinRpcSharp/JsonRpcResponse.cs b/BitcoinRpcSharp/JsonRpcResponse.cs index 9c0f5c8..128fd57 100644 --- a/BitcoinRpcSharp/JsonRpcResponse.cs +++ b/BitcoinRpcSharp/JsonRpcResponse.cs @@ -30,6 +30,8 @@ public class JsonRpcResponse [JsonProperty(PropertyName = "error", Order = 2)] public RpcError Error { get; set; } + [JsonProperty(PropertyName = "jsonrpc", Order = 2)] + public string JsonRpc { get; set; } /// /// Create a new JSON RPC response with the given id, error and result object. /// diff --git a/BitcoinRpcSharp/Responses/TransactionSinceBlock.cs b/BitcoinRpcSharp/Responses/TransactionSinceBlock.cs index 7829de8..e8f2da0 100644 --- a/BitcoinRpcSharp/Responses/TransactionSinceBlock.cs +++ b/BitcoinRpcSharp/Responses/TransactionSinceBlock.cs @@ -16,5 +16,10 @@ public class TransactionSinceBlock public string TxId { get; set; } public int Time { get; set; } public int TimeReceived { get; set; } + public string BlockHash { get; set; } + public int BlockIndex { get; set; } + public int BlockTime { get; set; } + + public bool Generated { get; set; } } } From 6ecc347f90ba2f5818630c641a7970f3dac7c37c Mon Sep 17 00:00:00 2001 From: Loning Date: Tue, 29 Apr 2014 00:49:47 +0800 Subject: [PATCH 09/10] nuget --- BitcoinRpcSharp/BitcoinRpcSharp.csproj | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/BitcoinRpcSharp/BitcoinRpcSharp.csproj b/BitcoinRpcSharp/BitcoinRpcSharp.csproj index 35eae69..6b95a2c 100644 --- a/BitcoinRpcSharp/BitcoinRpcSharp.csproj +++ b/BitcoinRpcSharp/BitcoinRpcSharp.csproj @@ -11,6 +11,8 @@ BitcoinRpcSharp v4.5 512 + ..\..\..\src\ + true AnyCPU @@ -85,6 +87,13 @@ + + + + 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=322105. The missing file is {0}. + + +