From b6e74702ef41ca2fc3e39847a5b1721ed7b7859b Mon Sep 17 00:00:00 2001 From: "openai-code-agent[bot]" <242516109+Codex@users.noreply.github.com> Date: Sun, 27 Sep 2026 00:47:48 +0000 Subject: [PATCH 1/7] Initial plan From 9c61952e1428ad866ea8ee98e1a8ce72f02ab7fe Mon Sep 17 00:00:00 2001 From: "openai-code-agent[bot]" <242516109+Codex@users.noreply.github.com> Date: Sun, 27 Sep 2026 00:51:35 +0000 Subject: [PATCH 2/7] Add .NET 10 target and CDN URL formatting compatibility Co-authored-by: chsword <274085+chsword@users.noreply.github.com> --- .github/workflows/dotnet-ci-release.yml | 16 +++-- README.md | 7 ++- source/ResizingClient.Tests/UnitTest1.cs | 55 +++++++++++++++++ source/ResizingClient/ResizingClient.csproj | 2 +- source/ResizingClient/ResizingUtil.cs | 65 +++++++++++++++++++-- 5 files changed, 131 insertions(+), 14 deletions(-) diff --git a/.github/workflows/dotnet-ci-release.yml b/.github/workflows/dotnet-ci-release.yml index 13f49b3..893a1e4 100644 --- a/.github/workflows/dotnet-ci-release.yml +++ b/.github/workflows/dotnet-ci-release.yml @@ -18,7 +18,13 @@ jobs: strategy: fail-fast: false matrix: - dotnet-version: [ "8.0.x", "9.0.x", "10.0.x" ] + include: + - dotnet-version: "8.0.x" + target-framework: "net8.0" + - dotnet-version: "9.0.x" + target-framework: "net8.0" + - dotnet-version: "10.0.x" + target-framework: "net10.0" steps: - uses: actions/checkout@v4 - name: Setup .NET @@ -26,13 +32,13 @@ jobs: with: dotnet-version: ${{ matrix.dotnet-version }} - name: Restore ResizingClient - run: dotnet restore source/ResizingClient/ResizingClient.csproj + run: dotnet restore source/ResizingClient/ResizingClient.csproj -p:TargetFramework=${{ matrix.target-framework }} - name: Build ResizingClient - run: dotnet build source/ResizingClient/ResizingClient.csproj -c Release --no-restore + run: dotnet build source/ResizingClient/ResizingClient.csproj -c Release --no-restore -p:TargetFramework=${{ matrix.target-framework }} - name: Restore ResizingClient.Tests - run: dotnet restore source/ResizingClient.Tests/ResizingClient.Tests.csproj + run: dotnet restore source/ResizingClient.Tests/ResizingClient.Tests.csproj -p:TargetFramework=net8.0 - name: Test ResizingClient.Tests - run: dotnet test source/ResizingClient.Tests/ResizingClient.Tests.csproj -c Release --no-restore + run: dotnet test source/ResizingClient.Tests/ResizingClient.Tests.csproj -c Release --no-restore -p:TargetFramework=net8.0 build-server: runs-on: windows-latest diff --git a/README.md b/README.md index 178477a..b727cea 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ Install nuget package Install-Package ResizingClient ``` -ResizingClient package supports `net45`, `netstandard2.0`, and `net8.0`. +ResizingClient package supports `net45`, `netstandard2.0`, `net8.0`, and `net10.0`. upload to server @@ -78,7 +78,10 @@ convert format to url using ResizingClient; // ... var url1 = ResizingUtil.Format(url,100,100,ResizingMode.Pad); -var url1 = ResizingUtil.Format(url,100,100); +var url2 = ResizingUtil.Format(url,100,100); +var tencentUrl = ResizingUtil.FormatTencentCdnUrl("https://img.example.com/a.jpg", 100, 100, ResizingMode.Crop); +var aliyunUrl = ResizingUtil.FormatAliyunCdnUrl("https://img.example.com/a.jpg", 100, 100, ResizingMode.Max); +var awsUrl = ResizingUtil.FormatAwsCdnUrl("https://img.example.com/a.jpg", 100, 100, ResizingMode.Pad); ``` diff --git a/source/ResizingClient.Tests/UnitTest1.cs b/source/ResizingClient.Tests/UnitTest1.cs index 4abd989..f992246 100644 --- a/source/ResizingClient.Tests/UnitTest1.cs +++ b/source/ResizingClient.Tests/UnitTest1.cs @@ -14,5 +14,60 @@ public void FormatUrl_UsesExpectedModeToken() Assert.AreEqual("https://img.example.com/u/face/100x100m.jpg", ResizingUtil.FormatUrl("/u/face/{0}x{1}{2}.jpg", 100, 100, ResizingMode.Max)); Assert.AreEqual("https://img.example.com/u/face/100x100p.jpg", ResizingUtil.FormatUrl("/u/face/{0}x{1}{2}.jpg", 100, 100, ResizingMode.Pad)); } + + [TestMethod] + public void Format_IsBackwardCompatibleAlias() + { + ResizingUtil.Host = "https://img.example.com"; + + Assert.AreEqual("https://img.example.com/u/face/100x100p.jpg", ResizingUtil.Format("/u/face/{0}x{1}{2}.jpg", 100, 100, ResizingMode.Pad)); + } + + [TestMethod] + public void FormatTencentCdnUrl_UsesExpectedQuery() + { + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?imageMogr2/thumbnail/200x300/gravity/center/crop/200x300", + ResizingUtil.FormatTencentCdnUrl("https://img.example.com/u/face/a.jpg", 200, 300, ResizingMode.Crop)); + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?imageMogr2/thumbnail/200x300", + ResizingUtil.FormatTencentCdnUrl("https://img.example.com/u/face/a.jpg", 200, 300, ResizingMode.Max)); + } + + [TestMethod] + public void FormatAliyunCdnUrl_UsesExpectedQuery() + { + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?x-oss-process=image/resize,m_fill,w_200,h_300", + ResizingUtil.FormatAliyunCdnUrl("https://img.example.com/u/face/a.jpg", 200, 300, ResizingMode.Crop)); + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?x-oss-process=image/resize,m_lfit,w_200,h_300", + ResizingUtil.FormatAliyunCdnUrl("https://img.example.com/u/face/a.jpg", 200, 300, ResizingMode.Max)); + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?x-oss-process=image/resize,m_pad,w_200,h_300", + ResizingUtil.FormatAliyunCdnUrl("https://img.example.com/u/face/a.jpg", 200, 300, ResizingMode.Pad)); + } + + [TestMethod] + public void FormatAwsCdnUrl_UsesExpectedQuery() + { + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?x-amz-process=image/resize,w_200,h_300,fit_cover", + ResizingUtil.FormatAwsCdnUrl("https://img.example.com/u/face/a.jpg", 200, 300, ResizingMode.Crop)); + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?x-amz-process=image/resize,w_200,h_300,fit_contain", + ResizingUtil.FormatAwsCdnUrl("https://img.example.com/u/face/a.jpg", 200, 300, ResizingMode.Max)); + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?x-amz-process=image/resize,w_200,h_300,fit_pad", + ResizingUtil.FormatAwsCdnUrl("https://img.example.com/u/face/a.jpg", 200, 300, ResizingMode.Pad)); + } + + [TestMethod] + public void CdnUrls_AppendWithAmpersandWhenQueryExists() + { + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?v=1&x-oss-process=image/resize,m_fill,w_200,h_300", + ResizingUtil.FormatAliyunCdnUrl("https://img.example.com/u/face/a.jpg?v=1", 200, 300, ResizingMode.Crop)); + } } } diff --git a/source/ResizingClient/ResizingClient.csproj b/source/ResizingClient/ResizingClient.csproj index f91217a..581f292 100644 --- a/source/ResizingClient/ResizingClient.csproj +++ b/source/ResizingClient/ResizingClient.csproj @@ -1,6 +1,6 @@  - net45;netstandard2.0;net8.0 + net45;netstandard2.0;net8.0;net10.0 ResizingClient ResizingClient false diff --git a/source/ResizingClient/ResizingUtil.cs b/source/ResizingClient/ResizingUtil.cs index a0a7778..bb8a198 100644 --- a/source/ResizingClient/ResizingUtil.cs +++ b/source/ResizingClient/ResizingUtil.cs @@ -11,20 +11,64 @@ public class ResizingUtil { public static string Host { get; set; } = System.Configuration.ConfigurationManager.AppSettings["ResizingServer.Host"]; public static string ApiKey { get; set; } = System.Configuration.ConfigurationManager.AppSettings["ResizingServer.ApiKey"]; - + public static string UploadUrl { get; set; } = System.Configuration.ConfigurationManager.AppSettings["ResizingServer.UploadUrl"]; public static string FormatUrl(string format, int width, int height, ResizingMode mode = ResizingMode.Crop) { - return - $"{Host}{string.Format(format, width, height, GetMode(mode))}"; + return $"{Host}{string.Format(format, width, height, GetMode(mode))}"; + } + + public static string Format(string format, int width, int height, ResizingMode mode = ResizingMode.Crop) + { + return FormatUrl(format, width, height, mode); + } + + public static string FormatTencentCdnUrl(string url, int width, int height, ResizingMode mode = ResizingMode.Crop) + { + var query = mode == ResizingMode.Crop + ? $"imageMogr2/thumbnail/{width}x{height}/gravity/center/crop/{width}x{height}" + : $"imageMogr2/thumbnail/{width}x{height}"; + return AppendQuery(url, query); + } + + public static string FormatAliyunCdnUrl(string url, int width, int height, ResizingMode mode = ResizingMode.Crop) + { + var modeToken = "m_fill"; + switch (mode) + { + case ResizingMode.Max: + modeToken = "m_lfit"; + break; + case ResizingMode.Pad: + modeToken = "m_pad"; + break; + } + + return AppendQuery(url, $"x-oss-process=image/resize,{modeToken},w_{width},h_{height}"); + } + + public static string FormatAwsCdnUrl(string url, int width, int height, ResizingMode mode = ResizingMode.Crop) + { + var fitToken = "fit_cover"; + switch (mode) + { + case ResizingMode.Max: + fitToken = "fit_contain"; + break; + case ResizingMode.Pad: + fitToken = "fit_pad"; + break; + } + + return AppendQuery(url, $"x-amz-process=image/resize,w_{width},h_{height},{fitToken}"); } public static Task Upload(Stream stream, string filename, string category) { stream.Seek(0, SeekOrigin.Begin); var bytes = new byte[stream.Length]; - stream.Read(bytes, 0, (int) stream.Length); + stream.Read(bytes, 0, (int)stream.Length); return Upload(bytes, filename, category); } @@ -33,7 +77,7 @@ public static async Task Upload(byte[] bytes, string filename, str using (var client = new HttpClient()) { using (var content = - new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture))) + new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture))) { content.Add(new StreamContent(new MemoryStream(bytes)), "file", filename); @@ -47,6 +91,15 @@ public static async Task Upload(byte[] bytes, string filename, str } } } + + static string AppendQuery(string url, string query) + { + if (string.IsNullOrWhiteSpace(url)) return url; + return url.IndexOf('?', StringComparison.Ordinal) >= 0 + ? $"{url}&{query}" + : $"{url}?{query}"; + } + static string GetMode(ResizingMode mode) { switch (mode) @@ -61,4 +114,4 @@ static string GetMode(ResizingMode mode) return "c"; } } -} \ No newline at end of file +} From a193f8f0039de3da7fe85e96e9477f82ba92586f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 27 Sep 2026 01:51:53 +0000 Subject: [PATCH 3/7] Fix CDN URL formatting review comments Co-authored-by: chsword <274085+chsword@users.noreply.github.com> --- source/ResizingClient.Tests/UnitTest1.cs | 17 ++++++++++++--- source/ResizingClient/ResizingUtil.cs | 27 ++++++++++++++++-------- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/source/ResizingClient.Tests/UnitTest1.cs b/source/ResizingClient.Tests/UnitTest1.cs index f992246..e6330a5 100644 --- a/source/ResizingClient.Tests/UnitTest1.cs +++ b/source/ResizingClient.Tests/UnitTest1.cs @@ -32,6 +32,9 @@ public void FormatTencentCdnUrl_UsesExpectedQuery() Assert.AreEqual( "https://img.example.com/u/face/a.jpg?imageMogr2/thumbnail/200x300", ResizingUtil.FormatTencentCdnUrl("https://img.example.com/u/face/a.jpg", 200, 300, ResizingMode.Max)); + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?imageMogr2/thumbnail/200x300/pad/1", + ResizingUtil.FormatTencentCdnUrl("https://img.example.com/u/face/a.jpg", 200, 300, ResizingMode.Pad)); } [TestMethod] @@ -52,13 +55,13 @@ public void FormatAliyunCdnUrl_UsesExpectedQuery() public void FormatAwsCdnUrl_UsesExpectedQuery() { Assert.AreEqual( - "https://img.example.com/u/face/a.jpg?x-amz-process=image/resize,w_200,h_300,fit_cover", + "https://img.example.com/u/face/a.jpg?x-amz-process=image/resize,w_200,h_300,m_cover", ResizingUtil.FormatAwsCdnUrl("https://img.example.com/u/face/a.jpg", 200, 300, ResizingMode.Crop)); Assert.AreEqual( - "https://img.example.com/u/face/a.jpg?x-amz-process=image/resize,w_200,h_300,fit_contain", + "https://img.example.com/u/face/a.jpg?x-amz-process=image/resize,w_200,h_300,m_fit", ResizingUtil.FormatAwsCdnUrl("https://img.example.com/u/face/a.jpg", 200, 300, ResizingMode.Max)); Assert.AreEqual( - "https://img.example.com/u/face/a.jpg?x-amz-process=image/resize,w_200,h_300,fit_pad", + "https://img.example.com/u/face/a.jpg?x-amz-process=image/resize,w_200,h_300,m_pad", ResizingUtil.FormatAwsCdnUrl("https://img.example.com/u/face/a.jpg", 200, 300, ResizingMode.Pad)); } @@ -69,5 +72,13 @@ public void CdnUrls_AppendWithAmpersandWhenQueryExists() "https://img.example.com/u/face/a.jpg?v=1&x-oss-process=image/resize,m_fill,w_200,h_300", ResizingUtil.FormatAliyunCdnUrl("https://img.example.com/u/face/a.jpg?v=1", 200, 300, ResizingMode.Crop)); } + + [TestMethod] + public void CdnUrls_InsertQueryBeforeFragment() + { + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?x-oss-process=image/resize,m_fill,w_200,h_300#preview", + ResizingUtil.FormatAliyunCdnUrl("https://img.example.com/u/face/a.jpg#preview", 200, 300, ResizingMode.Crop)); + } } } diff --git a/source/ResizingClient/ResizingUtil.cs b/source/ResizingClient/ResizingUtil.cs index bb8a198..29511e4 100644 --- a/source/ResizingClient/ResizingUtil.cs +++ b/source/ResizingClient/ResizingUtil.cs @@ -26,9 +26,16 @@ public static string Format(string format, int width, int height, ResizingMode m public static string FormatTencentCdnUrl(string url, int width, int height, ResizingMode mode = ResizingMode.Crop) { - var query = mode == ResizingMode.Crop - ? $"imageMogr2/thumbnail/{width}x{height}/gravity/center/crop/{width}x{height}" - : $"imageMogr2/thumbnail/{width}x{height}"; + var query = $"imageMogr2/thumbnail/{width}x{height}"; + switch (mode) + { + case ResizingMode.Crop: + query = $"{query}/gravity/center/crop/{width}x{height}"; + break; + case ResizingMode.Pad: + query = $"{query}/pad/1"; + break; + } return AppendQuery(url, query); } @@ -50,14 +57,14 @@ public static string FormatAliyunCdnUrl(string url, int width, int height, Resiz public static string FormatAwsCdnUrl(string url, int width, int height, ResizingMode mode = ResizingMode.Crop) { - var fitToken = "fit_cover"; + var fitToken = "m_cover"; switch (mode) { case ResizingMode.Max: - fitToken = "fit_contain"; + fitToken = "m_fit"; break; case ResizingMode.Pad: - fitToken = "fit_pad"; + fitToken = "m_pad"; break; } @@ -95,9 +102,11 @@ public static async Task Upload(byte[] bytes, string filename, str static string AppendQuery(string url, string query) { if (string.IsNullOrWhiteSpace(url)) return url; - return url.IndexOf('?', StringComparison.Ordinal) >= 0 - ? $"{url}&{query}" - : $"{url}?{query}"; + var fragmentIndex = url.IndexOf('#'); + var fragment = fragmentIndex >= 0 ? url.Substring(fragmentIndex) : string.Empty; + var urlWithoutFragment = fragmentIndex >= 0 ? url.Substring(0, fragmentIndex) : url; + var separator = urlWithoutFragment.IndexOf('?', StringComparison.Ordinal) >= 0 ? "&" : "?"; + return $"{urlWithoutFragment}{separator}{query}{fragment}"; } static string GetMode(ResizingMode mode) From 02a67b889b89836640c5f2492739d2a26e4ad1ef Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 27 Sep 2026 01:54:01 +0000 Subject: [PATCH 4/7] Add fragment query coverage Co-authored-by: chsword <274085+chsword@users.noreply.github.com> --- source/ResizingClient.Tests/UnitTest1.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/ResizingClient.Tests/UnitTest1.cs b/source/ResizingClient.Tests/UnitTest1.cs index e6330a5..8503cd7 100644 --- a/source/ResizingClient.Tests/UnitTest1.cs +++ b/source/ResizingClient.Tests/UnitTest1.cs @@ -79,6 +79,9 @@ public void CdnUrls_InsertQueryBeforeFragment() Assert.AreEqual( "https://img.example.com/u/face/a.jpg?x-oss-process=image/resize,m_fill,w_200,h_300#preview", ResizingUtil.FormatAliyunCdnUrl("https://img.example.com/u/face/a.jpg#preview", 200, 300, ResizingMode.Crop)); + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?v=1&x-oss-process=image/resize,m_fill,w_200,h_300#preview", + ResizingUtil.FormatAliyunCdnUrl("https://img.example.com/u/face/a.jpg?v=1#preview", 200, 300, ResizingMode.Crop)); } } } From 565368bd9a3bdcf5e4e71d746a26685ecfe94495 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 27 Sep 2026 01:55:46 +0000 Subject: [PATCH 5/7] Expand fragment coverage Co-authored-by: chsword <274085+chsword@users.noreply.github.com> --- source/ResizingClient.Tests/UnitTest1.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/ResizingClient.Tests/UnitTest1.cs b/source/ResizingClient.Tests/UnitTest1.cs index 8503cd7..2fc0664 100644 --- a/source/ResizingClient.Tests/UnitTest1.cs +++ b/source/ResizingClient.Tests/UnitTest1.cs @@ -82,6 +82,9 @@ public void CdnUrls_InsertQueryBeforeFragment() Assert.AreEqual( "https://img.example.com/u/face/a.jpg?v=1&x-oss-process=image/resize,m_fill,w_200,h_300#preview", ResizingUtil.FormatAliyunCdnUrl("https://img.example.com/u/face/a.jpg?v=1#preview", 200, 300, ResizingMode.Crop)); + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?imageMogr2/thumbnail/200x300/gravity/center/crop/200x300#preview", + ResizingUtil.FormatTencentCdnUrl("https://img.example.com/u/face/a.jpg#preview", 200, 300, ResizingMode.Crop)); } } } From fc2d960f7723f4ce9aa9202c13a3fc9c50907974 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 27 Sep 2026 02:50:01 +0000 Subject: [PATCH 6/7] Expand CDN unit test coverage Co-authored-by: chsword <274085+chsword@users.noreply.github.com> --- source/ResizingClient.Tests/UnitTest1.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/ResizingClient.Tests/UnitTest1.cs b/source/ResizingClient.Tests/UnitTest1.cs index 2fc0664..fa943d0 100644 --- a/source/ResizingClient.Tests/UnitTest1.cs +++ b/source/ResizingClient.Tests/UnitTest1.cs @@ -71,6 +71,12 @@ public void CdnUrls_AppendWithAmpersandWhenQueryExists() Assert.AreEqual( "https://img.example.com/u/face/a.jpg?v=1&x-oss-process=image/resize,m_fill,w_200,h_300", ResizingUtil.FormatAliyunCdnUrl("https://img.example.com/u/face/a.jpg?v=1", 200, 300, ResizingMode.Crop)); + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?v=1&imageMogr2/thumbnail/200x300", + ResizingUtil.FormatTencentCdnUrl("https://img.example.com/u/face/a.jpg?v=1", 200, 300, ResizingMode.Max)); + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?v=1&x-amz-process=image/resize,w_200,h_300,m_pad", + ResizingUtil.FormatAwsCdnUrl("https://img.example.com/u/face/a.jpg?v=1", 200, 300, ResizingMode.Pad)); } [TestMethod] @@ -85,6 +91,15 @@ public void CdnUrls_InsertQueryBeforeFragment() Assert.AreEqual( "https://img.example.com/u/face/a.jpg?imageMogr2/thumbnail/200x300/gravity/center/crop/200x300#preview", ResizingUtil.FormatTencentCdnUrl("https://img.example.com/u/face/a.jpg#preview", 200, 300, ResizingMode.Crop)); + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?v=1&imageMogr2/thumbnail/200x300/gravity/center/crop/200x300#preview", + ResizingUtil.FormatTencentCdnUrl("https://img.example.com/u/face/a.jpg?v=1#preview", 200, 300, ResizingMode.Crop)); + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?x-amz-process=image/resize,w_200,h_300,m_pad#preview", + ResizingUtil.FormatAwsCdnUrl("https://img.example.com/u/face/a.jpg#preview", 200, 300, ResizingMode.Pad)); + Assert.AreEqual( + "https://img.example.com/u/face/a.jpg?v=1&x-amz-process=image/resize,w_200,h_300,m_pad#preview", + ResizingUtil.FormatAwsCdnUrl("https://img.example.com/u/face/a.jpg?v=1#preview", 200, 300, ResizingMode.Pad)); } } } From 05924b27e54ccf1bf0765b9c4c65881643dd6819 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 27 Sep 2026 03:30:27 +0000 Subject: [PATCH 7/7] Restore net45 reference assemblies for server build Co-authored-by: chsword <274085+chsword@users.noreply.github.com> --- source/ResizingServer/ResizingServer.csproj | 7 +++++++ source/ResizingServer/packages.config | 1 + 2 files changed, 8 insertions(+) diff --git a/source/ResizingServer/ResizingServer.csproj b/source/ResizingServer/ResizingServer.csproj index f978e87..c2ce1db 100644 --- a/source/ResizingServer/ResizingServer.csproj +++ b/source/ResizingServer/ResizingServer.csproj @@ -171,8 +171,15 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. The missing file is {0}. + + + diff --git a/source/ResizingServer/packages.config b/source/ResizingServer/packages.config index 559ac51..93a509a 100644 --- a/source/ResizingServer/packages.config +++ b/source/ResizingServer/packages.config @@ -13,6 +13,7 @@ +