連載

Windows業務アプリケーション開発 Q&A #1

グレープシティ株式会社 八巻 雄哉
2006/06/17
Page1 Page2

.NETアプリで両面印刷ができない

 .NETのアプリケーションに両面印刷を指定する機能を実装しました。ところが、A社のプリンタでは正常に両面印刷が行われるにもかかわらず、B社のプリンタでは両面印刷が行われません。なぜでしょうか?

 .NET標準のクラス・ライブラリを使用して印刷する場合であれば、PrinterSettingsクラス(System.Drawing.Printing名前空間)のDuplexプロパティに「Horizontal」あるいは「Vertical」を設定することで両面印刷を行うことができます。また、プリンタが両面印刷をサポートしているかどうかは、同クラスのCanDuplexプロパティを使用して調べることができます。同じように、多くのサードパーティ製の印刷コンポーネントにも、たいていはプロパティとして両面印刷の設定が用意されています。

 ところがプリンタによっては、CanDuplexプロパティがTureであり、DuplexプロパティをHorizontalに設定しているにもかかわらず、両面印刷を行うことができない場合があります。

 プリンタなどの周辺機器は、アプリケーションが直接制御するのではなく、Windowsのデバイス・ドライバに対して指示を送ることで制御するかたちになります。従って、送った指示が期待どおりにプリンタを制御してくれるかどうかは、そのドライバの“でき”にかかっています。私の経験では、プリンタ・メーカーが独自の方式で高度な両面印刷機能を実装しているような場合に両面印刷の指示が無視されてしまうことが多いようです。

 このような場合、プログラムから両面印刷の設定を行うのではなく、あらかじめ両面印刷を設定したプリンタ・ドライバを用意しておき、それに対して印刷を行うといった回避策があります。どうしても、プログラムから両面印刷の設定を行いたい場合にはプリンタ・メーカーに問い合わせてみましょう。

 

.DLLファイルの配置について

 以前はVisual Basic 6.0で開発していましたが、現在では.NETでWindowsアプリケーションを構築しています。.NET環境において、使用しているコンポーネントの新しいバージョンを運用先に適用する場合、.DLLファイルを置き換えるだけでよいのでしょうか。

 VB 6の時代は、関連する.DLLファイルや.OCXファイルを置き換えることで、新しいバージョンを適用することができました。というよりも、できてしまっていたという方が正しいかもしれません。しかしながら、これにより既存のアプリケーションが動かなくなってしまうなど、いわゆる「DLL Hell」が問題となっていました。

 .NET では、.DLLファイルや.EXEファイルは「アセンブリ」と呼ばれ、その名前やバージョンといった情報を基に厳密に識別されます。この識別に使用されるバージョンは「アセンブリ・バージョン」と呼ばれます。またこれ以外にも、.DLLファイルや.EXEファイルには従来から存在するWin32ファイル・システム用のファイル・バージョンも付与されています。

.NET TIPS:Visual Studio 2005でバージョン情報を設定するには?
.NET TIPS:アセンブリにバージョン情報を設定するには?

 コンポーネントの新しいバージョンにおいて、アセンブリのファイル・バージョンのみを変更した場合には、アセンブリを置き換えるだけで新しいバージョンを適用することができます。ファイル・バージョンのみを変更するというのは、主に互換性に影響しない小さな変更の場合などです。

 しかし、アセンブリ・バージョンも変更している場合には、運用先では異なるアセンブリであると判断されるため、アセンブリを置き換えただけではアプリケーションは動作しません。

 この場合には、新しいアセンブリを使用するようにプロジェクトの参照を設定し直したうえで、アプリケーションをリビルド(再コンパイル)する必要があります。

 ただし、アセンブリ・バージョンが変更されている場合でもリビルドすることなくアプリケーションを動作させる方法として、構成ファイルや発行者ポリシーを使って、アプリケーションが使用するアセンブリ(.DLLファイル)のバージョンを指定する方法があります。

 例えば、MyApplication.exeというアプリケーションが、MyAssembly.dll(アセンブリ・バージョン:1.0.0.0)というアセンブリを使用していたとします。

 この場合に新しいバージョンのMyAssembly.dll(アセンブリ・バージョン:2.0.0.0)に置き換えてアプリケーションを動作させるには、下記のような内容のアプリケーション構成ファイルを作成し、MyApplication.exe.configというファイル名でMyApplication.exeと同じフォルダに配置します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MyAssembly"
                    publicKeyToken="cc4967777c49a3ff"
                    culture="neutral" />
        <bindingRedirect oldVersion="1.0.0.0"
                newVersion="2.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
アプリケーション構成ファイルの記述例
もともとMyAssembly.dll(アセンブリ・バージョン:1.0.0.0)を使用していたアプリケーションに対して、新しいMyAssembly.dll(アセンブリ・バージョン:2.0.0.0)を使用させるための設定。このようなファイルを配置することで、ビルド時とは異なる.DLLファイルをアプリケーションで参照するようにできる。
  publicKeyToken属性に指定する値は、assemblyフォルダ(デフォルトではC:\WINDOWS\assembly)から、そのアセンブリのプロパティを表示することで確認できる(ここでは.DLLファイルがグローバル・アセンブリ・キャッシュ(GAC)に格納されているものとする)。

 しかしながら、この方法は必要に迫られない限りは採用すべきではありません。アセンブリ・バージョンが変更されているということは、互換性に影響する何らかの変更が行われており、アプリケーションの動作に問題を起こす可能性があると考えるべきです。また、ライセンスが付与された市販のアセンブリの場合、ライセンス・キーの一部にアセンブリ・バージョンを使用していることがあるため、この方法が使用できない場合もあります。

 なお上記の内容は、すべて厳密名が付与されているアセンブリにおける動作です。厳密名が付与されていないアセンブリに関しては、アセンブリ・バージョンは無視されます。End of Article


八巻 雄哉(やまき ゆうや)
グレープシティ株式会社 テクニカルエバンジェリスト

2003年グレープシティ入社。PowerToolsシリーズのテクニカル・サポートを担当する傍ら、製品開発やマーケティングにも従事。現在は.NETとPowerToolsシリーズ普及のため、エバンジェリストとして活動中。カンファレンスなどでよく年齢を聞かれるので、いったいいくつに見られているのか気になっている。http://d.hatena.ne.jp/Yamaki/にてBlogを公開中。



 INDEX
  Windows業務アプリケーション開発 Q&A #1
    1..NETアプリで使用メモリが増えていく/ActiveXコントロールの1クリック回避
  2..NETアプリで両面印刷ができない/.DLLファイルの配置について
 
インデックス・ページヘ  「Windows業務アプリケーション開発 Q&A」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH