プロジェクトに別ドライブのリポジトリを追加する方法

【状況】
TracLightningを利用していたら、プロジェクトを作成したドライブの容量が足りなくなってきたので別ドライブにsubversionリポジトリを追加したい。
その際に、認証情報をプロジェクトと共有したい。


【環境】
サーバーOS:Windows2008R2系(Windowsならどれでも共通のはず)
TracLightning:Version.3.1.1
trac:Version 0.12.2.ja1
インストール先:C:\TracLight


【作業前の環境】
tracのアドレス:http://192.168.1.1/trac/MyProject
subversionリポジトリhttp://192.168.1.1/svn/MyProject


【作業内容】
Dドライブに新しいリポジトリを追加し、MyProjectと共通の認証情報を利用する。
ついでに、http://192.168.1.1/trac/MyProject/browser (tracリポジトリブラウザ)から参照できるようにする。


【作業手順】

  1. 新しいリポジトリを作成する
    1. スタートメニューから「Trac Lightning/コマンドプロンプト」を開く
    2. 以下を実行
    3. >d:\
      >mkdir svn\repo2\
      >cd svn\repo2\
      >svnadmin create MyProject\
  2. httpサーバーから参照できるように設定する
    1. テキストエディタで「C:\TracLight\CollabNetSVN\httpd\conf\httpd.conf」を開く
    2. 「<Location "/svn/">」を探し、<Location>タグ全体をコピーする
    3. コピーしたものを編集する。以下は設定例。
    4. #変更内容は、1行目のLocationタグ内のアドレスと3行目の物理パスのみ
      <Location "/newSvn/">
      DAV svn
      SVNParentPath "D:\svn\repo2"
      SVNListParentPath on
      AuthType Digest
      AuthName tra\
      AuthUserFile "C:\TracLight\projects\trac.htdigest"
      Require valid-user\
      AuthzSVNAccessFile "C:\TracLight\projects\svnauthz"
      </Location>
    5. httpサーバーを再起動する(TracLightningサービスの再起動など)
    6. この状態で、「http://192.168.1.1/newSvn/MyProject/」にアクセスすると、新しいリポジトリを参照できる。
  3. Tracのwebから参照できるようにする
    1. ブラウザからTracLightningの管理コンソールを開く
    2. 左のメニューから、一番下の「リポジトリ」を選択する
    3. 右側からリポジトリの追加を行う
    4. 名称:NewRepo(適当にわかり易い名前を)
      種別:(デフォルト)のまま
      ディレクトリ:D:\svn\repo2\MyProject
    5. 「追加」すると画面上部にメッセージが表示されるので、対応を行う
    6. スタートメニューから「Trac Lightning/コマンドプロンプト」を開く
    7. 以下を実行(2行目の最後の引数は3−3で設定した「名称」)
    8. >cd c:\TracLight\projects\trac\
      >trac-admin MyProject repository resync "NewRepo"
    9. 以下のメッセージを確認する(2行目は、新しく作成したリポジトリの最新リビジョン番号)
    10. >>Resyncing repository history for UT...
      >>n revisions cached.
      >>Done.
    11. ブラウザメニューの「リポジトリブラウザ」から参照できることを確認する
  4. リポジトリのコミット情報をtracに通知する
    1. 「c:\TracLight\projects\svn\MyProject\.svn\hook\post-commit.bat」を「D:\svn\repo2\MyProject\NewRepo\.svn\hook」にコピーする


【作業後の環境】
tracのアドレス:http://192.168.1.1/trac/MyProject
subversionリポジトリhttp://192.168.1.1/svn/MyProject
追加したsubversionリポジトリhttp://192.168.1.1/newSvn/MyProject
subversionリポジトリ(物理):c:\TracLight\projects\svn\MyProject
追加したsubversionリポジトリ(物理):D:\svn\repo2\MyProject\NewRepo


Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

セットアッププロジェクト作成時に躓いたところ

基本はdobonさんのところを参照で進めたけど、一部詰まったところがあったので。

セットアッププロジェクト: .NET Tips: C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/deployment/index.html


setup.msiをいろいろ調整する手順
※VisualStudio2008 Standardの場合。

  • ウィザードの画面遷移を変更したい場合(フォルダ指定をデフォルトフォルダに限定したい場合等)
  • バナーについて
    • ファイル形式はBMPjpegのみ。(gif,png等は無理矢理指定しても表示されない)
    • バナーロゴは500*70で作成する。それ以外の場合、自動でストレッチがかかる。
  • バナー追加手順
    標準で表示されるバナーが気に入らない場合、以下の手順で変更する。
    1. セットアッププロジェクトのフォルダ等にファイルをコピーしておく。
      ※後続処理でファイルを選択してもプロジェクトフォルダにコピーされない(絶対パスを保存する)ので、後々の管理が面倒になる。
    2. セットアッププロジェクトを右クリックし「追加」→「ファイル」
    3. 1で追加したファイルを指定する。
    4. ソリューションエクスプローラに追加された画像ファイルのプロパティを開き、ExcludeをFalseにする。
      ※これをしないと、メインアプリの出力フォルダに追加される。格好悪い。
    5. セットアッププロジェクトを右クリックし、「表示」→「ユーザーインターフェース
    6. 表示される要素の各プロパティの"BannerBitmap"から「参照」を選択
    7. 検索対象からアプリケーションフォルダを選択すると、3で指定したファイルが表示されているので選択する。
  • ショートカットの追加手順(デスクトップ・スタートメニュー)
    • 方式1
      1. セットアッププロジェクトを右クリックし「表示」→「ファイルシステム
      2. 右ペインに表示されているプロジェクトファイルを右クリックし、「○○○へのショートカットを作成」をクリックする。
      3. 同じ場所にショートカットファイルが表示されるので、左側のツリーの好きな場所にドラッグ&ドロップする。
        (移動のみでコピーできない)
      4. スタートメニュー("ユーザーのプログラムメニュー")の場合、フォルダを作成しないとスタートメニューのプログラム直下に配置される。
    • 方式2
      1. セットアッププロジェクトを右クリックし「表示」→「ファイルシステム
      2. ショートカットを作成したい場所を左ペインのツリーから選択する
      3. 右ペインを右クリックし、「新しいショートカットの作成」
      4. アプリケーションフォルダ内の本体の出力(○○○のプライマリ出力)を選択し、"OK"ボタンを押す。
        ※左のツリーからフォルダを右クリックし、「ユーザーのデスクトップへのショートカットを作成」等を選択しても、そのフォルダを開くショートカットしか作成されないので注意。
        私はこれではまっていました・・・


ユーザーにショートカットの登録有無を選択させる方法についてはdobonさんところを参照。

DataMemberにDataTableを設定した場合の注意事項

WCFでサービスからデータを受信しようとしたらエラーが発生した。
DataTableを受け渡しする場合、TableNameを設定しないとxml化できずにエラーとなる。

エラーメッセージだけじゃ判断できないからちょっと悩んでしまった。


Exception Type: System.ServiceModel.CommunicationException
Message: ソケット接続が中止されました。これは、メッセージ処理時のエラー、リモート ホストでの受信タイムアウトの超過、または基になるネットワーク リソースの問題が原因で発生する可能性があります。ローカル ソケットのタイムアウトは '01:04:59.9680000' でした。
Stack Trace:

Server stack trace:
場所 System.ServiceModel.Channels.StreamConnection.Read(Byte buffer, Int32 offset, Int32 size, TimeSpan timeout)
場所 System.ServiceModel.Channels.SessionConnectionReader.Receive(TimeSpan timeout)
場所 System.ServiceModel.Channels.SynchronizedMessageSource.Receive(TimeSpan timeout)
場所 System.ServiceModel.Channels.FramingDuplexSessionChannel.Receive(TimeSpan timeout)
場所 System.ServiceModel.Channels.FramingDuplexSessionChannel.TryReceive(TimeSpan timeout, Message& message)
場所 System.ServiceModel.Dispatcher.DuplexChannelBinder.Request(Message message, TimeSpan timeout)
場所 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object
ins, Object outs, TimeSpan timeout)
場所 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object
ins, Object[] outs)
場所 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
場所 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:
場所 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
場所 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
場所 *.IMyService.Hoge(MyParameter prm)
場所 *.MyService.Hoge(MyParameter prm) <- WCFサービス呼び出しの開始位置

クライアントPCに配布するアプリケーションでodp.NETを利用する方法

クライアントPCでodp.NETを使用するためには、どうやらDLLをアプリケーションのフォルダに配置するだけではだめな模様。
(VS上でdllのローカルコピーを指定してもうまくいかない)
そのため、OracleInstantClientをクライアントPCにインストールする必要がある。
batファイルを一つ叩くだけでOKだが、それにしても一般ユーザーの利用するPCにインストールする場合は注意が必要。


とりあえず以下のようにすることで何とかなった。
開発PC:ODAC 11.1.0.7.20 with Oracle Developer Tools for Visual Studioを普通にインストール(UniversalInstaller)
アプリ配布先PC:ODAC 11.1.0.7.20 with Xcopy Deployment(install.batを適切にカスタマイズして使用)


ClickOnceを使っているので、そこの自動インストールコンポーネントに追加できるようになって欲しいところ。




ちなみに、これがない時代はUniversalInstaller使わないといけなかったとか。

odp.NETでバインドがうまくできない

初期状態だと、バインドはバインド順になっているようなので、バインド変数名で指定したい場合は

OracleCommand.BindByName = true;

にする。

      • -

情報元
ODP.NETでOracle固有の機能を活用する(4/4) − @IT