TFS2013から2015へのアップデート

(tfs 2013 to 2015 update)
9月末にTFS2013をインストールしてから早1カ月ちょい
まったく触れていませんでしたが!
やっと2015に更新しました

まずは、2013から2015へのアップデートの備考録をっと

前提として2013をインストールしていますorzmakoto.hatenablog.com

TFS2015のシステム要件 抜粋

WindowsServer:2008 R2 SP2以降 or 2012 or 2012 R2
SQLServer:2012 SP1以降 or 2014

詳細↓↓↓
Team Foundation Server のシステム要件

1.Team Foundation Server 2015のインストール

インストールメディアをTFS2013をインストールしたサーバーに入れてウィザードに従って進行
f:id:orzmakoto:20151016220027j:plain

続きを読む

Team Foundation Server 2013のセットアップ

(Team Foundation Server TFS 2013 setup )
夏の激務で、何もして遊べない中、TFS2015がリリースされました。

Team Foundation Server 2015 RC 2 | リリース ノート

30以上の機能追加強化されており非常に魅力的です。

Git関連
SharePoint 拡張機能
Project Server 機能拡張
迅速なコード編集
REST API
などなど

いざ、検証用のTFS2013をアップデートしよと思い、VMを探すがない。
どーこにもない。

(ノ∀`)アチャー

多分、なんかで消しちゃったな

アップデート検証用にTFS2013をまるっと新規で建てたので手順メモです。
基本的には、ウィザードに従っていけば完了します。

構成

役割 名前 OSとか
ドメインサーバー **  
DBサーバー NinoDb WindowsServer2012R2Standard SQLServer2014
Webサーバー NinoTfs WindowsServer2012R2Standard

の3台で構築
単一のサーバーで構築する場合には、ドメコンは不要ですが今回はDBとWebを分けるので必要になります

後々、SharePointとかとも連携したい場合などにはドメイン環境必須

続きを読む

Web Deployを使ってファイルの配置

(Web Deploy 3.0 Microsoft.Web.Deployment C# -preSync -postSync)
Microsoft Web Deploy3.0を使ってリモートサーバに簡単に配置することが可能です。
基本的には、VisulaStudioから実行するかmsdeploy.exeをコマンドラインから実行するかになります。
が様々な理由でC#上から実行したい時がありました。
(条件に合わせてパラメーターを変更したいとか)

tech.tanaka733.net
こちらの記事を参考にして試していましたが決定的な違いが

・記事ではIISに対してアプリを発行しているが、やりたいのはファイルの配置をやりたい
・preSyncとpostSyncを使って前後でコマンドを実行したい

C#実行したい内容

msdeploy.exe 
-verb:sync 
-source:dirPath="配置元ディレクトリ" 
-dest:computerName="http://配置先コンピュータ/MSDeployAgentService",userName="ドメイン名\ユーザー名",password="パスワード",includeAcls="False",dirPath=配布先ディレクトリ 
-enableRule:DoNotDeleteRule 
-preSync:runcommand="C:\Tools\配置前実行.bat" 
-postSync:runcommand="C:\Tools\配置後実行.bat"

ディレクトリを同期

こんな感じですぐに分かりました。

var sourceBaseOptions = new DeploymentBaseOptions();
var destBaseOptions = new DeploymentBaseOptions()
{

  ComputerName = "http://配置先コンピュータ/MSDeployAgentService",
  UserName = @"ドメイン名\ユーザー名",
  Password = "パスワード",
  IncludeAcls = false,
};

sourceBaseOptions.Trace += trace;
destBaseOptions.Trace += trace;

var deploymentObject = DeploymentManager.CreateObject(
  DeploymentWellKnownProvider.DirPath,
  @"配置元ディレクトリ",
  sourceBaseOptions);

var syncOptions = new DeploymentSyncOptions();
//-enableRule:DoNotDeleteRule
syncOptions.DoNotDelete = true;

//-verb:sync を実行
var changes = deploymentObject.SyncTo(DeploymentWellKnownProvider.DirPath, @"配布先ディレクトリ", destBaseOptions, syncOptions);

実行にはC:\Program Files\IIS\Microsoft Web Deploy V3\Microsoft.Web.Deployment.dllの参照追加が必要です。

が-preSyncと-postSyncの実行方法がまったくわからず。
調べ方もよくわからず。

そこで必殺
アセンブリ
わからない時は大抵これでなんとかなります

C:\Program Files\IIS\Microsoft Web Deploy V3
Microsoft.Web.Deployment.dll
msdeploy.exe

この2つを覗いてわかったこと。
-preSyncと-postSyncは、配置を実行する前後に、RunCommandを実行している

msdeploy.exeは引数を受け取って
1. RunCommand(preSync)を実行
2. Sync(DirPath)を実行
3. RunCommand(postSync)を実行
としていること

RunCommandの実行

var destBaseOptions = new DeploymentBaseOptions()
{

  ComputerName = "http://配置先コンピュータ/MSDeployAgentService",
  UserName = @"ドメイン名\ユーザー名",
  Password = "パスワード",
  IncludeAcls = false,
};

var syncOptions = new DeploymentSyncOptions();
var verboseLevel = new DeploymentBaseOptions();

verboseLevel.Trace += trace;
destBaseOptions.Trace += trace;
using (DeploymentObject deploymentObject = DeploymentManager.CreateObject(DeploymentWellKnownProvider.RunCommand, @"実行コマンド", verboseLevel))
{
  deploymentObject.SyncTo(destBaseOptions, syncOptions);
}

こでハマったのが実行したいコマンドをどこで指定すればいいかわからない。結果としてDeploymentManager.CreateObjectの第二引数に実行したいコマンドを書けばよかったですが、これも時間かかりました。

なんだかなー

今回、

逆あせんプリには、
Telerik JustDecompiler free .NET decompiler
を使用しました。
完全に復元はできませんが、アセンブリ(dll,exe)からプロジェクトを復元できるので調べ事などには便利です。

【LyncSDK】IMの受信をキャプチャしてみる

(Lync SDK received text)
前に、相手を指定して、新しい会話を始めるサンプルを作成しました。
会話作成後に交わされたIMをキャプチャしてみます。

準備

LyncSDKをインストールすると、WPFSilverlightのプロジェクトテンプレートが作成されますが、それを使わずにCosnoleApplicationで実装します。

UIフレームワークは不要なでの参照するアセンブリは2つです。
Microsoft.Lync.Model
Microsoft.Lync.Utilities
が参照追加のダイヤログには出てきません。
f:id:orzmakoto:20150628134528p:plain

アセンブリを直接参照して追加する必要があります。
C:\Program Files (x86)\Microsoft Office\Office15\LyncSDK\Assemblies\Desktop\Microsoft.Lync.Model.dll
C:\Program Files (x86)\Microsoft Office\Office15\LyncSDK\Assemblies\Desktop\Microsoft.Lync.Utilities.dll

実装

IM画面を新しい会話でスタート

Automation automation = LyncClient.GetAutomation();

// IMを送る相手を設定する。
// 複数人に送る場合にはその人数だけリストに追加
List<string> inviteeList = new List<string>();
inviteeList.Add("ninomiya@sample.com");

// IM送信時のオプション設定を構築
var modalitySettings = new Dictionary<AutomationModalitySettings, object>();
modalitySettings.Add(AutomationModalitySettings.SendFirstInstantMessageImmediately, true);

// 呼び出し
IAsyncResult ar = automation.BeginStartConversation(
  AutomationModalities.InstantMessage
  , inviteeList
  , modalitySettings
  , null
  , null);

//新しく開いたウィンドを取得
ConversationWindow conversationWindow = automation.EndStartConversation(ar);

ConversationWindow
新しく開いたIM画面を操作するためのウィンドです。
参加者の情報取得や追加退席、各種変更イベント登録はConversationWindowに行います。

IM受信イベント登録

//メッセージ受信の処理を、IM参加者ごとにイベントを登録
foreach (Participant participant in conversationWindow.Conversation.Participants)
{
  // IM を取得
  InstantMessageModality im = participant.Modalities[ModalityTypes.InstantMessage] as InstantMessageModality;

  // IM 受信の際のイベント処理を登録
  im.InstantMessageReceived += ImModality_InstantMessageReceived;
}

ModalityTypes
IM画面には、IM送受信以外にもファイル共有や音声ビデオなど複数の機能が含まれています。
その機能毎に、Modalityが分かれています。
ModalityTypes enumeration (Microsoft.Lync.Model.Conversation)

定義名 和訳
InstantMessage インスタントメッセージングのモダリティ
AudioVideo オーディオ/ビデオモダリティ
ApplicationSharing アプリケーション共有のモダリティ
ContentSharing コンテンツ共有のモダリティ

メッセージ受信のイベント(ImModality_InstantMessageReceived)

private void ImModality_InstantMessageReceived(object sender, MessageSentEventArgs e)
{
  //IM取得
  InstantMessageModality instantMessageModality = sender as Microsoft.Lync.Model.Conversation.InstantMessageModality;
  //送信者の名前を取得
  var senderName = instantMessageModality.Participant.Contact.GetContactInformation(ContactInformationType.DisplayName);
  //画面に表示
  Console.WriteLine(senderName + ":" + e.Text);
}

(∩´∀`)∩ワーイ
IM参加者ごとにイベント登録が必要な件と送信者情報の取得する件で若干悩みましたが無事にできましま。