2012/11/29

Google Apps Email Migration APIのC#サンプルプログラムをコンパイルし実行・その7・サンプルコードのコンパイル

[Windows]+[R]を押下する。


PowerShellを通常モードで起動する。

応答ファイルを準備する

C#コンパイラの応答ファイル(Response File)を準備する。

応答ファイルGoogleDataAPI.rspを以下の通り作成する。
PS C:\Users\user01\Downloads> $REDIST="$Env:Programfiles\Google\Google Data API SDK\Redist"
PS C:\Users\user01\Downloads> $(echo "/lib:`"$REDIST`""; dir $REDIST\*.dll -exclude 'zlib.*' | foreach {"/r:$($_.Name)"}) > GoogleDataAPI.rsp
PS C:\Users\user01\Downloads>

内容を確認する。
PS C:\Users\user01\Downloads> cat .\GoogleDataAPI.rsp
/lib:"C:\Program Files\Google\Google Data API SDK\Redist"
/r:Google.GData.AccessControl.DLL
/r:Google.GData.Analytics.dll
/r:Google.GData.Apps.dll
/r:Google.GData.Blogger.dll
/r:Google.GData.Calendar.dll
/r:Google.GData.Client.dll
/r:Google.GData.Contacts.dll
/r:Google.GData.ContentForShopping.dll
/r:Google.GData.Documents.dll
/r:Google.GData.Extensions.dll
/r:Google.GData.Photos.dll
/r:Google.GData.Spreadsheets.dll
/r:Google.GData.WebmasterTools.dll
/r:Google.GData.YouTube.dll
/r:Newtonsoft.Json.dll
PS C:\Users\user01\Downloads>


Aliasの設定

C#コンパイラcsc.exeは、インストールされている.Net Frameworkのバージョン毎に存在していて、PATHが通っていない。毎回フルパスで指定するのは煩雑なので、エイリアスを設定する。以下の通り作業する。ここでは、.Net Framework v3.5のcsc.exeを使う。
PS C:\Users\user01\Downloads> Set-Alias csc $Env:windir\Microsoft.NET\Framework\v3.5\csc.exe
PS C:\Users\user01\Downloads> 

以下の通り確認する。
PS C:\Users\user01\Downloads> csc
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.5420
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.

fatal error CS2008: 入力が指定されていません。
PS C:\Users\user01\Downloads>

コンパイル

その1・サンプルコードのダウンロード』でダウンロードしたmigrationsample.csをコンパイルする。コンパイルする際、前に作成した応答ファイルGoogleDataAPI.rspを指定する。
PS C:\Users\user01\Downloads> csc '@GoogleDataAPI.rsp' migrationsample.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.5420
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.

warning CS1685: 定義済みの型 'System.Runtime.CompilerServices.ExtensionAttribute' は、グローバル
        エイリアスの複数のアセンブリ内で定義されています。'c:\Program Files\Reference
        Assemblies\Microsoft\Framework\v3.5\System.Core.dll' からの定義を使用してください。
PS C:\Users\user01\Downloads> 

警告が表示されるが、コンパイルは正常に終了していて、migrationsample.exeが作成されている。
PS C:\Users\user01\Downloads> dir


    ディレクトリ: C:\Users\user01\Downloads


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2012/10/17     23:09       2433 Add-AssemblyToGlobalAssemblyCache.ps1
-a---        2012/10/17     23:18       1046 GoogleDataAPI.rsp
-a---        2012/10/17     22:38   29167616 Google_Data_API_Setup_2.1.0.0.msi
-a---        2012/10/17     22:29       8008 migrationsample.cs
-a---        2012/10/17     23:33       9728 migrationsample.exe


PS C:\Users\user01\Downloads>

引数を与えずに実行すると、使い方が表示される。
PS C:\Users\user01\Downloads> .\migrationsample.exe
Usage:
  migration_sample    [destination_email]

domain:
  The hosted domain (e.g. example.com) in which the migration will occur.

login_user:
  The username of the administrator or user migrating mail.

login_password:
  The password of the administrator or user migrating mail.

destination_user:
  The username to which emails should be migrated. End users can only transfer mail to their own mailboxes.  If unspecified, will default to login_email.
PS C:\Users\user01\Downloads>


その0・概要
その1・サンプルコードのダウンロード
その2・Google Data API Installer MSIのダウンロード
その3・Global Assembly Cache Toolのダウンロードと改造
その4・Google Data API Installer MSIのインストール
その5・PowerShell実行ポリシの変更
その6・Google Data APIアセンブリのGACへのインストール
その7・サンプルコードのコンパイル

Google Apps Email Migration APIのC#サンプルプログラムをコンパイルし実行・その6・Google Data APIアセンブリのGACへのインストール

PowerShellを管理者モードで起動する。


「スタート」ボタンから、「すべてのプログラム」→「アクセサリ」→「Windows PowerShell」の順で開き、「Windows PowerShell」を右クリックし、「管理者として実行(A)...」を選択する。


UACダイアログが表示される。確認し、「はい(Y)」ボタンを押下する。

Googe Data APIが正常にインストールされていれば、以下の通りDLLが確認できる。
PS C:\Users\user01\Downloads> $REDIST="$Env:Programfiles\Google\Google Data API SDK\Redist"
PS C:\Users\user01\Downloads> dir $REDIST


    ディレクトリ: C:\Program Files\Google\Google Data API SDK\Redist


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2012/10/17     22:59            Debug
-a---        2012/05/27     16:49      24576 Google.GData.AccessControl.DLL
-a---        2012/05/27     16:49      24064 Google.GData.Analytics.dll
-a---        2012/05/27     16:49      73728 Google.GData.Apps.dll
-a---        2012/05/27     16:49       8192 Google.GData.Blogger.dll
-a---        2012/05/27     16:49      36864 Google.GData.Calendar.dll
-a---        2012/05/27     16:49     212992 Google.GData.Client.dll
-a---        2012/05/27     16:49      29184 Google.GData.Contacts.dll
-a---        2012/05/27     16:49      39424 Google.GData.ContentForShopping.dll
-a---        2012/05/27     16:49      53248 Google.GData.Documents.dll
-a---        2012/05/27     16:49      90112 Google.GData.Extensions.dll
-a---        2012/05/27     16:49      45056 Google.GData.Photos.dll
-a---        2012/05/27     16:49      40960 Google.GData.Spreadsheets.dll
-a---        2012/05/27     16:49      24064 Google.GData.WebmasterTools.dll
-a---        2012/05/27     16:49      73728 Google.GData.YouTube.dll
-a---        2012/05/27     16:49     375296 Newtonsoft.Json.dll
-a---        2012/05/27     16:49      59904 zlib.x86.dll


PS C:\Users\user01\Downloads>
しかし、インストール直後は、これらがglobal assembly cache(以下、GAC)にはインストールされていない。以下の通り確認する。

PS C:\Users\user01\Downloads> dir "$Env:windir\assembly\GAC_MSIL" -filter "Google*"
PS C:\Users\user01\Downloads>

Google Data APIのアセンブリをGACにインストールする。以下の通り実行する。

PS C:\Users\user01\Downloads> $REDIST_PATH = "$Env:ProgramFiles\Google\Google Data API SDK\Redist"
PS C:\Users\user01\Downloads> dir $REDIST\*.dll -exclude 'zlib.*' | .\Add-AssemblyToGlobalAssemblyCache.ps1
PS C:\Users\user01\Downloads>

GACにインストールされたことを以下の通り確認する。

PS C:\Users\user01\Downloads> dir "$Env:windir\assembly\GAC_MSIL" -filter "Google*"


    ディレクトリ: C:\Windows\assembly\GAC_MSIL


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2012/10/17     23:11            Google.GData.AccessControl
d----        2012/10/17     23:11            Google.GData.Analytics
d----        2012/10/17     23:11            Google.GData.Apps
d----        2012/10/17     23:11            Google.GData.Blogger
d----        2012/10/17     23:11            Google.GData.Calendar
d----        2012/10/17     23:11            Google.GData.Client
d----        2012/10/17     23:11            Google.GData.Contacts
d----        2012/10/17     23:11            Google.GData.Documents
d----        2012/10/17     23:11            Google.GData.Extensions
d----        2012/10/17     23:11            Google.GData.Photos
d----        2012/10/17     23:11            Google.GData.Spreadsheets
d----        2012/10/17     23:11            Google.GData.YouTube


PS C:\Users\user01\Downloads>


その0・概要
その1・サンプルコードのダウンロード
その2・Google Data API Installer MSIのダウンロード
その3・Global Assembly Cache Toolのダウンロードと改造
その4・Google Data API Installer MSIのインストール
その5・PowerShell実行ポリシの変更
その6・Google Data APIアセンブリのGACへのインストール
その7・サンプルコードのコンパイル

Google Apps Email Migration APIのC#サンプルプログラムをコンパイルし実行・その5・PowerShell実行ポリシの変更

OSインストール直後の状態では、ローカルのPowerShellスクリプトを実行できない。これを変更する。
PowerShellを管理者モードで起動する。


「スタート」ボタンから、「すべてのプログラム」→「アクセサリ」→「Windows PowerShell」の順で開き、「Windows PowerShell」を右クリックし、「管理者として実行(A)...」を選択する。


UACダイアログが表示される。確認し、「はい(Y)」ボタンを押下する。

PS C:\Users\user01\Downloads> Set-ExecutionPolicy RemoteSigned -Force
PS C:\Users\user01\Downloads>


その0・概要
その1・サンプルコードのダウンロード
その2・Google Data API Installer MSIのダウンロード
その3・Global Assembly Cache Toolのダウンロードと改造
その4・Google Data API Installer MSIのインストール
その5・PowerShell実行ポリシの変更
その6・Google Data APIアセンブリのGACへのインストール
その7・サンプルコードのコンパイル

Google Apps Email Migration APIのC#サンプルプログラムをコンパイルし実行・その4・Google Data API Installer MSIのインストール

Google Data APIをインストールする。


』で保存したGoogle_Data_API_Setup_2.1.0.0.msiをダブルクリックする。


「Google Data API SDK Setup Wizard」が起動される。「Next>」ボタンを押下する。


Everyone」ラジオボタンを選択し、「Next>」ボタンを押下する。


Next>」ボタンを押下する。


進行状況が表示される。


UACダイアログが表示される。確認の上、「はい(Y)」ボタンを押下する。


進行状況が表示される。


インストールが正常終了したことを確認し、「Close>」ボタンを押下する。


その0・概要
その1・サンプルコードのダウンロード
その2・Google Data API Installer MSIのダウンロード
その3・Global Assembly Cache Toolのダウンロードと改造
その4・Google Data API Installer MSIのインストール
その5・PowerShell実行ポリシの変更
その6・Google Data APIアセンブリのGACへのインストール
その7・サンプルコードのコンパイル

Google Apps Email Migration APIのC#サンプルプログラムをコンパイルし実行・その3・Global Assembly Cache Toolのダウンロードと改造

ダウンロード

Global Assembly Cache Tool in PowerShell: Add-AssemblyToGlobalAssemblyCache.ps1

ブラウザで『The Identity Management Explorer: Use Powershell to put your assemblies in the GAC』を開く。


画面中央「script」リンクをクリックする。


「ダウンロード」ボタンを押下する。


「直接ダウンロード」を選択する。


「保存(S)」ボタンを押下し、ファイルを適切な場所に

ブロックの解除

ダウンロードしたファイルに対して、以下を実行する。


右クリックから「プロパティ(R)」を選択する。


「ブロックの解除(K)」ボタンを押下する。

スクリプトの修正

ダウンロードしたAdd-AssemblyToGlobalAssemblyCache.ps1を改造する。このスクリプトは、アセンブリをglobal assembly cache(以下、GAC)にインストールするが、オリジナル版のスクリプトは、アセンブリがデジタル署名されていることを必須条件としている。

一方、『その2・Google Data API Installer MSIのダウンロード』でダウンロードしたGoogle_Data_API_Setup_2.1.0.0.msiでインストールされるDLLは、デジタル署名されていない。このため、このままではこのスクリプトではこれらのDLLをGACに登録できない。

以下の通り編集する。

メモ帳でAdd-AssemblyToGlobalAssemblyCache.ps1を開く。
PS C:\Users\user01\Downloads> notepad .\Add-AssemblyToGlobalAssemblyCache.ps1

赤字の部分を追加する。
$LoadedAssembly = [System.Reflection.Assembly]::LoadFile($Assembly)

#        if ($LoadedAssembly.GetName().GetPublicKey().Length -eq 0)
#        {
#            throw "The assembly '$Assembly' must be strongly signed."
#        }

        Write-Verbose "Installing: $Assembly"
        $PublishObject.GacInstall($Assembly)


その0・概要
その1・サンプルコードのダウンロード
その2・Google Data API Installer MSIのダウンロード
その3・Global Assembly Cache Toolのダウンロードと改造
その4・Google Data API Installer MSIのインストール
その5・PowerShell実行ポリシの変更
その6・Google Data APIアセンブリのGACへのインストール
その7・サンプルコードのコンパイル

Google Apps Email Migration APIのC#サンプルプログラムをコンパイルし実行・その2・Google Data API Installer MSIのダウンロード

ダウンロード

ブラウザで『Protocol Basics - Google Data APIs ― Google Developers』を開く。


Audience」リンクをクリックする。


client libraries」リンクをクリックする。


画面を下に移動する。


「.Net」行の「Library Download」列「Download」リンクをクリックする。


Google_Data_API_Setup_2.1.0.0.msi」リンクをクリックする。


Google_Data_API_Setup_2.1.0.0.msi」リンクをクリックする。


「保存(S)」ボタンを押下し、適切な場所にファイルを保存する。

ブロックの解除


ダウンロードしたファイル対して、以下を実行する。



右クリックから「プロパティ(R)」を選択する。


「ブロックの解除(K)」ボタンを押下する。


その0・概要
その1・サンプルコードのダウンロード
その2・Google Data API Installer MSIのダウンロード
その3・Global Assembly Cache Toolのダウンロードと改造
その4・Google Data API Installer MSIのインストール
その5・PowerShell実行ポリシの変更
その6・Google Data APIアセンブリのGACへのインストール
その7・サンプルコードのコンパイル

Google Apps Email Migration APIのC#サンプルプログラムをコンパイルし実行・その1・サンプルコードのダウンロード

ダウンロード

サンプルコードmigrationsample.csをダウンロードする。ブラウザで『Google Apps Platform ― Google Developers』を開く。


画面左「Get Started」リンクをクリックする。


「.Net」タブをクリックし、「.Net Sample」リンクをクリックする。


画面右「File info」の中の「View raw file」を右クリックし、「対象をファイルに保存(A)...」を選択し、適切な場所にmigrationsample.csを保存する。

ブロックの解除

ダウンロードしたファイルに対して、以下を実行する。


右クリックから「プロパティ(R)」を選択する。


「ブロックの解除(K)」ボタンを押下する。


その0・概要
その1・サンプルコードのダウンロード
その2・Google Data API Installer MSIのダウンロード
その3・Global Assembly Cache Toolのダウンロードと改造
その4・Google Data API Installer MSIのインストール
その5・PowerShell実行ポリシの変更
その6・Google Data APIアセンブリのGACへのインストール
その7・サンプルコードのコンパイル

Google Apps Email Migration APIのC#サンプルプログラムをコンパイルし実行・その0・概要

メールシステムの切替作業では一般に、旧システムから新システムへメールデータ(メッセージなど)を移行を伴う。Google Appsでは、これを支援するためGoogle Apps Email Migration APIが提供されている。これに対応したクライアント側のライブラリがGoogleから提供されており、Java版・Python版に加えて、.NET版がある。今回はこの内、.NET版をインストールし、サンプルコードをコンパイルするまでの手順について解説する。

C#のコンパイルには一般に、Visual StudioのC#対応製品を使う。しかし、GUIを使わない簡単なコードであれば、.NET Frameworkに付属しているコンパイラで十分。今回は、.NET Frameworkに付属のコンパイラでコンパイルする手順を紹介する。

なお、このサンプルコードをC#からPowerShellに移植したものを『The Sample Code of Google Apps Email Migration API in PowerShell』で紹介している。


その0・概要
その1・サンプルコードのダウンロード
その2・Google Data API Installer MSIのダウンロード
その3・Global Assembly Cache Toolのダウンロードと改造
その4・Google Data API Installer MSIのインストール
その5・PowerShell実行ポリシの変更
その6・Google Data APIアセンブリのGACへのインストール
その7・サンプルコードのコンパイル