Windows Azure Websaiteにアセンブリのアップロードをせずに、NuGetパッケージリストアを使用する方法

知っておきたいWindows Azure Web Sitesのまとめ10個」で紹介している
「パッケージ管理」を実際にやる方法を
Use NuGet Package Restore to avoid pushing assemblies to Windows Azure Websites
で紹介されていたので、意訳してみたよ。

 

Windows Azure Websitesでは、TFSやGITなどのリポジトリのソースコードから、
簡単にWindows Azureへプッシュして、
ASP.NETやPHP、NodeなどのをWebサイトで公開することができます。

Windows Azure Websitesは、どのようにして依存関係を管理するのでしょうか?
ソース管理にアセンブリファイルをチェックインしたり、NuGetパッケージを含めないといけないのでしょうか?

 

NuGet 1.6では、NuGet Package Restoreと呼ばれる素晴らしい機能が追加されています。
この機能は、ソースコードリポジトリにNuGetパッケージを追加することなく、
NuGetパッケージを使用することができるようにします。

ソリューションをVisual StudioやMSBuild(Windows Azure Websitesで使用している)でビルドすると、
ビルドターゲットとしてnuget.exeが呼び出され、
パッケージを確認し、自動的にフェッチし、コードをコンパイルする前にインストールします。

大きなパッケージをバージョンコントロールの外出しをすることで、
ソースコードリポジトリを小さく保つのに役立ちます。

NuGet Package Restoreを有効にする

NuGet Package Restoreを有効にするために、Visual Studioで操作します。
単純に、ソリューションで右クリックをし、”Enable NuGet Package Restore”をクリックします。

 

NuGet package restore Windows Azure Websites Antares

 

Visual Studioでは、ソリューションのプロジェクトで以下の処理を実施します。

  • ソリューションルートに「.nuget」フォルダーを作成し、NuGet.exeとNuGet targetを同梱します
  • MSBuildは、プロジェクトのNuGet targetをインポートし、ビルド時にNuGetパッケージをダウンロード、インストールをします。

一般公開していないアセンブリの更新や、NuGet.orgからの自動更新を信用できない場合は?

それらのアセンブリ専用のNuGetパッケージを作成します。
すでに、それらのNuGetパッケージを用意しているなら、話は早いです。
www.nuget.orgで一般公開されていない、ホストされているパッケージのオンラインフィードを確認します。

プロジェクトで、カスタムフィードを、どのようにリンクするのでしょうか?
.nugetフォルダーで、NuGet.targetファイルを編集します。
Package Sourceエレメントで、セミコロンで区切ることで複数のフィードを設定できます。

 

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <!-- ... -->
       
        <!-- Package sources used to restore packages. By default will used the registered sources under %APPDATA%\NuGet\NuGet.Config -->
        <PackageSources>"http://www.myget.org/F/chucknorris;http://www.nuget.org/api/v2"</PackageSources>

        <!-- ... -->
    </PropertyGroup>

    <!-- ... -->
</Project>