Using NuGet to install your ORM into Visual Studio

This article has been moved to its new home here: https://benperk.github.io/msdn/2012/2012-03-using-nuget-to-install-your-orm-into-visual-studio.html I have spent a lot of time Working with NHibernate 3.0 and now am also giving some attention to the Entity Framework.  One of the road blocks for using NHibernate is the initial configuration requirements.  There are a significant number of actions which must…


Agile Methodology in Microsoft patterns & practices

Note: This article is updated at Agile Methodology in Microsoft patterns & practices. “I put my heart and my soul into my work, and have lost my mind in the process.” — Vincent Van Gogh I find myself mentoring on Agile practices and Agile methodology on a regular basis.  More and more teams are needing…


Office オートメーションで割り当てたオブジェクトを解放する – Part2

※ この記事は以下の Office サポート フォーラムに移行しました。 https://social.msdn.microsoft.com/Forums/ja-JP/0d9c6273-bade-4f6a-a0de-5adb748d15eb/office-part2   こんにちは、Office 開発系サポート 森 健吾 (kenmori) です。   今回の投稿では、Office オートメーションの実装コードで割り当てたオブジェクトを解放する – Part1 の続編を記載いたします。続編では、前回の投稿でベスト プラクティスとして紹介した解放処理に対して解説を実施した後、正しくオブジェクト解放を実施しない場合に生じる影響についてご紹介します。 最初に、オブジェクト解放漏れがあると、主に以下のような事象があるということは先に述べておきます。 ・意図とは異なる COM オブジェクトに接続され、想定とは異なる結果を返し、アプリケーションの動作に予期せぬ影響を与えます。 ・通常のメソッド実行にも関わらず COMException 等の例外が返さることがあります。 ・イベント呼び出し時にフリーズすることがあります。 ・Office の内部処理 (例. 終了時の処理など) に予期せぬ影響を及ぼすことがあります。 ・解放漏れのオブジェクトがメモリを圧迫します。  オブジェクトの解放漏れと聞いて、誰もが最初に思いつくメモリ圧迫などのパフォーマンスへの影響以外にも実に様々な問題の要因となります。今回は、この投稿を読み終えた後、なぜそうなるかが理解できるようになることを目標とします。なお、幅広い読者層を想定して、可能な限りわかりやすい記述を心掛けます。そのため、なるべく簡略化した説明にするためにより一般的な内容だけにフォーカスし、細かな説明等は省いております。フィードバック等がありましたらお知らせください。 まずは、Part 1 で確認したベスト プラクティスのコードを分析しましょう。 1.    ベスト プラクティスのコードを分析する 1)     .NET における Interop COM オブジェクトの生成について New 演算子で Excel.Application クラス等を生成すると、RCW (ランタイム呼び出し可能ラッパー) も生成され COM オブジェクトのインスタンスを管理することになります。…


Agile Results: It Works for Teams and Leaders Too

Note: This article is updated at Agile Results for Teams and Leaders. “No one can whistle a symphony.  It takes a whole orchestra to play it.”  — H.E. Luccock A colleague of mine that’s been using Agile Results as an individual contributor asked me about how to apply Agile Results to a team as a…


1. Office PIA 経由で Office 製品をオートメーションすることによる、Office オブジェクトモデルの操作

※ この記事は以下の Office サポート フォーラムに移行しました。 https://social.msdn.microsoft.com/Forums/ja-JP/ab2638ca-d7cf-4947-8255-0418daa5f35e/1-office-pia-320763000112391-office?forum=officesupportteamja   こんにちは、Office 開発系サポートの柴田 茂 (sshibata) です。本稿で表現している、Office オートメーションとは、Windows 上の全く別のアプリケーションを使用して、Office によって通常は手動やマクロによって行われる処理を、自動化する仕組みとなります。例えば、Excel のオートメーションを使用すれば、新規ブックの作成、ブックへのデータ入力、グラフの作成などの作業を自動的に実行させることができます。Excel などの Microsoft Office アプリケーションでは、通常はユーザー インターフェイスを介して手動で実行する機能のほぼすべてを、オートメーションによってプログラムから実行することができます。 Microsoft Office では、プライマリ相互運用機能アセンブリ (PIA) と呼ばれるライブラリが用意されており(以下Office PIA)、これを使用することで、Office アプリケーションによって公開されている COM オブジェクトを使ってOfficeを外部から操作するOffice ソリューションを開発することができます。 利用できるオブジェクトやメソッドの名前はほぼVBA と一緒であり、従来VBA マクロに限定されていたOffice 用のオブジェクトが、外部アプリケーションからアクセスできるインターフェースとして公開されているということになります。 このテクノロジを実装した場合の実行条件は、クライアント環境に、操作対象の Officeアプリケーションがインストールされていて、かつ対象バージョン以降の.NET Framework がインストールされていることと、Office PIA がGAC(グローバルアセンブリキャッシュ) に登録されていることになりますが、詳細については、次回以降に掘り下げたいと思います。 さて、Visual Studio にてアプリケーションを作成し、参照設定から、Office のタイプライブラリ経由で Office 製品のインスタンスを生成してコーディングを始めると、インテリセンス等でも確認できる通り、必要なオブジェクトを取得すれば、VBA と同じ感覚でプログラミングすることができます。 基本的には、Office アプリケーション上で、ユーザー インターフェイスを介して手動で実行する機能のほぼすべてを、実装することができます。 注意点としては、先日の森さんの投稿(Office オートメーションで割り当てたオブジェクトを解放する – Part1) のようなCOM オブジェクトを操作しているという意識を持って、オブジェクトを明示的に破棄するなどの処理を行ったり、イベントを適切に扱う等の考慮事項が発生します。さて、実際にOffice アプリケーションのイベントを扱うサンプルをご紹介しましょう。 今回制御したいのは、Excel…


Microsoft Office 製品を Windows のプラットフォーム上で別アプリケーションから操作する場合のテクノロジについて

※ この記事は以下の Office サポート フォーラムに移行しました。 https://social.msdn.microsoft.com/Forums/ja-JP/0b68be04-30fa-4c6f-8abe-48a188601b81/microsoft-office-windows-   こんにちは、Office 開発系サポートの柴田 茂 (sshibata) です。 私の投稿では、Microsoft Office 製品を、Windows のプラットフォーム上で別アプリケーションから操作する場合にどんなテクノロジを検討すべきかというテーマについて記載致します。 .NET Framework が登場するはるか前の時代から、Windows 上で動作するOffice アプリケーションに介入してアプリケーションソフト間でデータを転送・共有するための仕組みは存在していました。それが、OLE と呼ばれる規格(Object Linking and Embedding) であったり、DDE というテクノロジであったり(Dynamic Data Exchange)、ファイルを含めたデータソースへのアクセスを目的としたCOM のセットである、ActiveX Data Objects (ADO)であったりしました。 これらのテクノロジは、マイナーバージョンアップを繰り返しながら、あるいは、.NET Framework に対応できるようにインターフェースが内部的にラップされる等の経緯を経て進化を続けています。 さらに、Office 用のプライマリ相互運用機能アセンブリ (Office PIA) と呼ばれる Office オブジェクトを外部に公開したインターフェース経由でのデータアクセスや、Open XML 準拠のOffice ファイルに対するアクセスが登場してきているのが現在の状況です。そして、今後急速にCloud 化の大きなうねりに伴った新技術が公開されてくることでしょう。 ただし、全ての会社が最新の流行に乗って社内IT 環境を整えられるわけでもありませんし、今まで運用・作成してきた情報資産の有効活用も大きな課題となることは想像に難くありません。私も現在の仕事を通して、お客様(現場の担当者様)が色々と創意工夫をしながら、よりよいIT 環境を提供しようと日々模索していることに、大きな刺激を受けています。 前置きが少し長くなりましたが、私の連載においては、Office アプリケーションで作成されたファイルをコード上から操作するテクノロジについて整理する予定です。 既にご存知の方も多いとは思いますが、Office を操作するためには、主に以下の技術を利用することができます。   1. Office PIA 経由で、Office 製品をオートメーションすることによる、Office…


Office のプロセス インスタンス制御について

※ この記事は以下の Office サポート フォーラムに移行しました。 https://social.msdn.microsoft.com/Forums/ja-JP/6741b589-b14b-4dca-b213-6be567d9cd0e/office-1239812503125251247512473?forum=officesupportteamja   こんにちは、Office 開発系サポート 森 健吾 (kenmori) です。 今回の投稿では、Office のプロセス インスタンス制御というテーマにて記載いたします。 Office アプリケーションは MDI (Multi Document Interface) アプリケーションとして開発されており、1 つのプロセスで複数のドキュメントを扱えるように実装されています。 様々な場合において、既存のプロセス インスタンスでドキュメントを開くか、新しいプロセスを起動してドキュメントを開くかを制御しています。 この動作は、Office の自動化プログラムを実装するにあたり、色々と影響があるため、事前に把握しておいた方が良い内容と思い、ご紹介させていただくに至りました。   新規 / 既存プロセスで開く操作に関する一覧 No 操作 Word Excel PowerPoint 1 プログラムを起動する 既存 新規 既存 2 エクスプローラからファイルを開く 既存 既存 既存 3 オブジェクト生成 (CreateObject) 新規 新規 既存 4 OLE 埋め込みオブジェクト…


Office オートメーションで割り当てたオブジェクトを解放する – Part1

※ この記事は以下の Office サポート フォーラムに移行しました。 https://social.msdn.microsoft.com/Forums/ja-JP/5deec897-a897-404b-a610-f7d894fde1b3/office-part1?forum=officesupportteamja     こんにちは、Office 開発系サポート 森 健吾 (kenmori) です。 今回の投稿では、Office オートメーションの実装コードで割り当てたオブジェクトを解放するというテーマにて記載いたします。 .NET Framework 上で動作するカスタム アプリケーションにおいて、Office オートメーションで処理を実装する場合には割り当てたオブジェクトを確実に解放することをお勧めします。   2016/12/2 Update サンプル コードを中間オブジェクトも解放するよう、より適切な形に変更しました。   2017/3/28 Update アプリケーション終了前に一部のオブジェクトを解放するよう、サンプル コードをさらに適切な形に変更しました。   これは、Office が内部的に OLE や DDE などを通じて実施するオブジェクト インスタンス制御 (※) によって CLR 上で解放漏れ (または解放待ち) のオブジェクトが誤って参照されてしまい、カスタム アプリケーション側の動作に様々な予期せぬ影響を与えることにあります。 ※ OLE や DDE などを通じて実施するオブジェクト インスタンス制御や、解放漏れによる影響等については、別途記載を予定しております。 今回は、詳細な上記の詳細な理由や解放しない際の影響等は省略し、オブジェクト解放の正しい実装方法について記載します。   1.     割り当てたオブジェクトを解放する…


Ability to Execute

Note: This article is updated at Ability to Execute. If you’re familiar with Gartner’s Magic Quadrants, you’ll recognize Ability to Execute.  “Ability to Execute” is a powerful concept.   Here is a quick mental model to picture Ability to Execute: Ability to Execute is a quick way to help prioritize ideas worth acting on.   After all,…


Creating a W3WP Memory dump on Windows Server 2008 R2

This article has been moved to its new home here:  https://benperk.github.io/msdn/2012/2012-02-creating-a-w3wp-memory-dump-on-windows-server-2008-r2.html On a web server with multiple application pools, there most likely will be multiple W3WP processes.  Therefore, the first action to take when creating a memory dump of a W3WP worker process is to find which W3WP process you need to get the dump of.  To…