diff --git a/README.md b/README.md
index 78220093..006f13f6 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@ The home of the NuGet.server package, a lightweight standalone NuGet server
## Feedback
-If you're having trouble with the NuGet.org Website, file a bug on the [NuGet Gallery Issue Tracker](https://github.com/nuget/NuGetGallery/issues).
+If you're having trouble with the NuGet.org Website or NuGet.Server, file a bug on the [NuGet Gallery Issue Tracker](https://github.com/nuget/NuGetGallery/issues).
If you're having trouble with the NuGet client tools (the Visual Studio extension, NuGet.exe command line tool, etc.), file a bug on [NuGet Home](https://github.com/nuget/home/issues).
diff --git a/src/CommonAssemblyInfo.cs b/src/CommonAssemblyInfo.cs
index d142ba7e..c2cfa8b0 100644
--- a/src/CommonAssemblyInfo.cs
+++ b/src/CommonAssemblyInfo.cs
@@ -13,7 +13,7 @@
[assembly: ComVisible(false)]
-[assembly: AssemblyVersion("2.10.3.0")]
-[assembly: AssemblyFileVersion("2.10.3.0")]
+[assembly: AssemblyVersion("2.11.1.0")]
+[assembly: AssemblyFileVersion("2.11.1.0")]
[assembly: NeutralResourcesLanguage("en-US")]
diff --git a/src/NuGet.Server/Core/DefaultServiceResolver.cs b/src/NuGet.Server/Core/DefaultServiceResolver.cs
index 253f1ac1..233c4b63 100644
--- a/src/NuGet.Server/Core/DefaultServiceResolver.cs
+++ b/src/NuGet.Server/Core/DefaultServiceResolver.cs
@@ -12,16 +12,19 @@ public class DefaultServiceResolver
: IServiceResolver
{
private readonly IHashProvider _hashProvider;
- private readonly IPackageService _packageService;
private readonly IServerPackageRepository _packageRepository;
+ private readonly IPackageAuthenticationService _packageAuthenticationService;
+ private readonly IPackageService _packageService;
public DefaultServiceResolver()
{
_hashProvider = new CryptoHashProvider(Constants.HashAlgorithm);
- _packageRepository = new ServerPackageRepository(PackageUtility.PackagePhysicalPath, _hashProvider, new TraceLogger());
+ _packageRepository = new ServerPackageRepository(PackageUtility.PackagePhysicalPath, _hashProvider, new TraceLogger());
- _packageService = new PackageService(_packageRepository, new PackageAuthenticationService());
+ _packageAuthenticationService = new PackageAuthenticationService();
+
+ _packageService = new PackageService(_packageRepository, _packageAuthenticationService);
}
public object Resolve(Type type)
@@ -31,14 +34,19 @@ public object Resolve(Type type)
return _hashProvider;
}
- if (type == typeof(IPackageService))
+ if (type == typeof(IServerPackageRepository))
{
- return _packageService;
+ return _packageRepository;
}
- if (type == typeof(IServerPackageRepository))
+ if (type == typeof(IPackageAuthenticationService))
{
- return _packageRepository;
+ return _packageAuthenticationService;
+ }
+
+ if (type == typeof(IPackageService))
+ {
+ return _packageService;
}
return null;
diff --git a/src/NuGet.Server/Infrastructure/ServerPackageRepository.cs b/src/NuGet.Server/Infrastructure/ServerPackageRepository.cs
index 270f9dcd..9d52ff37 100644
--- a/src/NuGet.Server/Infrastructure/ServerPackageRepository.cs
+++ b/src/NuGet.Server/Infrastructure/ServerPackageRepository.cs
@@ -186,7 +186,7 @@ private void AddPackagesFromDropFolder()
try
{
// Create package
- var package = new ZipPackage(_fileSystem.OpenFile(packageFile));
+ var package = new OptimizedZipPackage(_fileSystem, packageFile);
// Is it a symbols package?
if (IgnoreSymbolsPackages && package.IsSymbolsPackage())
@@ -235,6 +235,8 @@ private void AddPackagesFromDropFolder()
}
finally
{
+ OptimizedZipPackage.PurgeCache();
+
MonitorFileSystem(true);
}
}
@@ -552,6 +554,8 @@ public void ClearCache()
{
lock (_syncLock)
{
+ OptimizedZipPackage.PurgeCache();
+
_serverPackageStore.Clear();
_serverPackageStore.Persist();
_logger.Log(LogLevel.Info, "Cleared package cache.");
diff --git a/src/NuGet.Server/NuGet.Server.csproj b/src/NuGet.Server/NuGet.Server.csproj
index 121e6533..72f77535 100644
--- a/src/NuGet.Server/NuGet.Server.csproj
+++ b/src/NuGet.Server/NuGet.Server.csproj
@@ -38,11 +38,12 @@
False
- ..\..\packages\Newtonsoft.Json.8.0.1\lib\net45\Newtonsoft.Json.dll
+ ..\..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll
True
-
- ..\..\packages\NuGet.Core.2.10.1\lib\net40-Client\NuGet.Core.dll
+
+ False
+ ..\..\packages\NuGet.Core.2.11.1\lib\net40-Client\NuGet.Core.dll
True
diff --git a/src/NuGet.Server/NuGet.Server.nuspec b/src/NuGet.Server/NuGet.Server.nuspec
index 0984391c..53893b42 100644
--- a/src/NuGet.Server/NuGet.Server.nuspec
+++ b/src/NuGet.Server/NuGet.Server.nuspec
@@ -16,7 +16,7 @@
-
+
diff --git a/src/NuGet.Server/Publishing/PackageService.cs b/src/NuGet.Server/Publishing/PackageService.cs
index acd8d89d..81a485a3 100644
--- a/src/NuGet.Server/Publishing/PackageService.cs
+++ b/src/NuGet.Server/Publishing/PackageService.cs
@@ -32,16 +32,26 @@ public void CreatePackage(HttpContextBase context)
// Get the package from the request body
// ReSharper disable once PossibleNullReferenceException
- var stream = request.Files.Count > 0 ? request.Files[0].InputStream : request.InputStream;
+ var stream = request.Files.Count > 0
+ ? request.Files[0].InputStream
+ : request.InputStream;
- var package = new ZipPackage(stream);
+ // Copy the package to a temporary file
+ var temporaryFile = Path.GetTempFileName();
+ using (var temporaryFileStream = File.Open(temporaryFile, FileMode.OpenOrCreate, FileAccess.ReadWrite))
+ {
+ stream.CopyTo(temporaryFileStream);
+ }
+
+ var package = new OptimizedZipPackage(temporaryFile);
- // Make sure they can access this package
+ // Make sure the user can access this package
if (Authenticate(context, apiKey, package.Id))
{
try
{
_serverRepository.AddPackage(package);
+
WriteStatus(context, HttpStatusCode.Created, "");
}
catch (InvalidOperationException ex)
@@ -49,6 +59,16 @@ public void CreatePackage(HttpContextBase context)
WriteStatus(context, HttpStatusCode.InternalServerError, ex.Message);
}
}
+
+ package = null;
+ try
+ {
+ File.Delete(temporaryFile);
+ }
+ catch (Exception)
+ {
+ WriteStatus(context, HttpStatusCode.InternalServerError, "Could not remove temporary upload file.");
+ }
}
public void PublishPackage(HttpContextBase context)
diff --git a/src/NuGet.Server/Strings.resx b/src/NuGet.Server/Strings.resx
index a5aa057c..a9860a03 100644
--- a/src/NuGet.Server/Strings.resx
+++ b/src/NuGet.Server/Strings.resx
@@ -121,6 +121,6 @@
Package {0} already exists. The server is configured to not allow overwriting packages that already exist.
- Package {0} is a symbols package (it contains .pdb fiels and a /src folder). The server is configured to ignore symbols packages.
+ Package {0} is a symbols package (it contains .pdb files and a /src folder). The server is configured to ignore symbols packages.
\ No newline at end of file
diff --git a/src/NuGet.Server/packages.config b/src/NuGet.Server/packages.config
index e4e591ce..72f4e492 100644
--- a/src/NuGet.Server/packages.config
+++ b/src/NuGet.Server/packages.config
@@ -2,8 +2,8 @@
-
-
+
+
\ No newline at end of file
diff --git a/test/NuGet.Server.Tests/NuGet.Server.Tests.csproj b/test/NuGet.Server.Tests/NuGet.Server.Tests.csproj
index 57117fa9..1eafd7c3 100644
--- a/test/NuGet.Server.Tests/NuGet.Server.Tests.csproj
+++ b/test/NuGet.Server.Tests/NuGet.Server.Tests.csproj
@@ -23,17 +23,19 @@
..\..\packages\Microsoft.Web.Xdt.2.1.1\lib\net40\Microsoft.Web.XmlTransform.dll
True
-
- ..\..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll
+
+ False
+ ..\..\packages\Moq.4.5.0\lib\net45\Moq.dll
True
False
- ..\..\packages\Newtonsoft.Json.8.0.1\lib\net45\Newtonsoft.Json.dll
+ ..\..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll
True
-
- ..\..\packages\NuGet.Core.2.10.1\lib\net40-Client\NuGet.Core.dll
+
+ False
+ ..\..\packages\NuGet.Core.2.11.1\lib\net40-Client\NuGet.Core.dll
True
diff --git a/test/NuGet.Server.Tests/packages.config b/test/NuGet.Server.Tests/packages.config
index 4b7eef41..3c1fa71f 100644
--- a/test/NuGet.Server.Tests/packages.config
+++ b/test/NuGet.Server.Tests/packages.config
@@ -1,9 +1,9 @@
-
-
-
+
+
+