NuGet and Bin Deploy
We recently posted about trying to release WCF Data Services more frequently, and some of the changes we’re making. In this post, we’ll take a slightly deeper look at NuGet,bin deploy, and where WCF Data Services is headed.
Managing dependencies with NuGet
If you’re already familiar with NuGet, you probably understand its value proposition and can skip ahead to bin deploying applications. If you haven’t used NuGet before, this section will provide you with a quick introduction. The NuGet site has a great documentation section that provides significantly more detail.
What is NuGet?
Languages such as Ruby and Python have package management systems that make it trivial to take a dependency on a centrally published package. NuGet provides similar functionality for .NET. With a few clicks or a simple command a developer can take a dependency on Microsoft.Data.Services.Client, the assembly that provides WCF Data Services client functionality. Taking a dependency on that package adds three other packages to your project: Microsoft.Data.OData, Microsoft.Data.Edm and System.Spatial.
Getting a specific version of WCF Data Services is also very easy: issuing the command
Install-Package Microsoft.Data.Services.Client –Version 5.0.1 will install version 5.0.1 of the client, even if there is a more recent version of the client published. (Issuing the command
Install-Package Microsoft.Data.Services.Client or installing the package with the explorer will always get the most recent version of the client.)
Installation experience with Manage NuGet Packages dialog:
Installation experience with Package Manager Console:
Sample installation commands:
Install-Package Microsoft.Data.Services.Client: Installs the most recent released version of the WCF Data Services client.
Install-Package Microsoft.Data.Services.Client –Pre: Installs the most recent version of the WCF Data Services client (including prereleases).
Install-Package Microsoft.Data.Services.Client –Version 184.108.40.206403: Installs an explicit version of WCF Data Services client, ignoring more recent versions.
Updating Packages with NuGet
In addition to the simple installation process, NuGet makes it easy to update packages.
Update experience with Manage NuGet Packages dialog:
Update experience with Package Manager Console:
Sample update commands:
Update-Package: Updates all packages to their most recently released version.
Update-Package –Pre: Updates all packages to their most recent versions (including prereleases).
Update-Package Microsoft.Data.Services.Client: Updates the Microsoft.Data.Services.Client package to its most recently released version, including any dependency updates required by the Microsoft.Data.Services.Client package.
Simplified Dependency Management
In summary, NuGet greatly simplifies the process of locating, downloading, and adding references to the most recent version of WCF Data Services. Developers no longer need to search the Download Center for a version of WCF Data Services, sort by date, download and install an MSI, manually copy the DLLs and add a reference to them, etc. With NuGet developers simply use the Manage NuGet Packages dialog or the Package Manager Console to easily take a dependency on WCF Data Services.
Bin Deploying Applications
Bin deployment is a term commonly used for a deployment process wherein the contents of the bin folder (potentially with a few other files) are copied to a server using a very simple file copy or similar process. In other words, bin deploy scenarios do not require an MSI to be run on the server that will host the application. This is especially key in scenarios where the server is not controlled by the developer (e.g., Web hosting). However, bin deploy is also beneficial in many other scenarios. Some of the benefits of bin deploy are as follows:
- Simple file copy deployment using SMB, FTP, or some similar alternative.
- Assemblies can be configured to run in medium trust (GACed assemblies always run in full trust).
- No need to have an operations team run an MSI to get the latest version of an assembly.
- Easier to automate deployments.
Bin deployment is also a natural companion for NuGet, semantic versioning, and our amended EULA for the imminent 5.0.1 version of WCF Data Services, which will include a redistribution clause.
A Glimpse Into the Future
Down the road, we will be taking a much deeper dependency on NuGet – we are currently revamping our tooling to install NuGet packages when you add a WCF Data Service or a reference to an OData service to your application.
Thoughts? Comments? We’d love to hear from you!