C# と .NET Framework 4 を主にWindows Formのアプリケーション開発について

2009年9月25日

UNCパス対応時のちょっとした注意(Path.GetDirectoryName) UNCパス対応時のちょっとした注意(Path.GetDirectoryName)

.NET Frameworkの殆どのIO関連クラスは共有フォルダも通常のローカルディスクと同様にアクセスできるので、UNCパスについて特に意識せずにコーディングできます。

そんな.NET Frameworkですが、最近ちょっとした落とし穴に遭ったのでメモしておきます。
(基本的にはレアケースです。)

今回注目するのは、System.IO.PathクラスGetDirectoryName(string)メソッドです。

実はmsdnの解説にちゃんと書いてあります。

続きを読む "UNCパス対応時のちょっとした注意(Path.GetDirectoryName)"

2009年8月30日

DotNetZip Library 1.8 安定版 DotNetZip Library 1.8 安定版

image5 .NET Framework アプリケーションから使用できるZIPライブラリのDotNetZip Libraryがv1.8.4.22で安定版になっています。

DotNetZip Library - Release- 1.8

以前からにv1.9がプレビュー状態ですからそう遠くなく安定版になるのかもしれませんね。

DotNetZipのライセンスはMS-PLです。

v1.7を使用している場合、次の2点について特に注意が必要です。
非互換性についてはコンパイル時点でわかるので大きな問題はないですが、その他注意すべき変更点の部分はホントに注意が必要です。

以前は複数のZipファイルを同時に扱う場合、テンポラリフォルダ上で衝突する可能性がありましたが、v1.8ではZipがあるフォルダに内容と同一名のファイルがあると衝突するようです(詳細は未確認)。

いずれにしても危険なので、専用の一時フォルダを作成してZipFile.TempFIleFolder プロパティに設定する必要があるでしょう。

リリースノート上の記述は以下の通りです。

 

v1.7からの非互換性:

CompressionLevel 列挙体をFxCopに準拠したため、メンバの名称が変更されている。例えば ”BEST_COMPRESSION” が”BestCompression”に、 “LEVEL3” が “Level3”になっている。CompressionStrategy 列挙体も同様。


その他注意すべき変更点:

    一時ファイルの使用法が変更:v1.8では、一時ファイルをZipファイルと同一ディレクトリに作成します。以前はユーザのテンポラリ ディレクトリを使用していました。
    DotNetZipを使用するアプリケーションは、ZipFile.TempFIleFolderプロパティでオーバーライドできるのはこれまでと変わりません。

     

    v1.8の新機能:

    ReleaseとDebug両モードのDLLが提供されるようです。
    また、Script系から使用できるようにComVisibleになっています。
    ほかには、日付(NTFSのatime/mtime/ctime)などですね。

    公開されているリストは以下(ちょっと面倒なのでこっちは英語のまま)

    • 7803: optionally flatten folder paths when extracting
    • 7366: DotNetZip is now ComVisible, usable from Javascript, VBScript, PHP, etc.
    • The Zip Reduced library is now marked as CLS Compliant and APTC
    • DotNetZip now ships both a RELEASE dll and a DEBUG dll. The RELEASE build is significantly faster than the DEBUG build.
    • 7241: better options during extract when files exist in the filesystem
    • 7192: just-in-time stream provisioning when adding entries for scalability with large archives.
    • 7072: file selector support (including wildcards) for Add/Extract/Remove/Select
    • 7159: Ionic.Zlib.GZipStream, to replace the dysfunctional BCL class.
    • 7067: SFX files are now ZIP files as well as EXE files, and can be read, edited, updated by DotNetZip or by WinZip. Also, UI tweaks in the SFX.
    • Improvements in the WinForms Zip tool. Now supports extract as well as create. It can be used as a replacement for WinZip. It gets set as the default "Open" tool for zip files in Windows Explorer when you install via the MSI. Also, myriad UI improvements, like drag-n-drop. Exploits the new file selector capability: eg, extract *.xml files via the UI.
    • CLS-compliance on Ionic.Zlib.dll
    • 7071: Properly store/set file attributes on Zip/Extract
    • 6878: Properly encode and extract NTFS atime/mtime/ctime
    • now sets LastMod time on Extract() on .NET Compact Framework
    • 7191: icons set in Windows Explorer when the MSI is installed
    • 5470: execute-on-unpack for SFX
    • 7907: "Add" events
    • 8093: Unix-format timestamps.
    • 8124: Windows + Unix time formats are optional

     

    DotNetZipライブラリのダウンロードはここからできます。

    2009年5月 2日

    mono 2.4 で WinForm : 実行 mono 2.4 で WinForm : 実行

    monoのテスト用に作成したWinFormのプロジェクトをビルドしてVista上で実行しました。

    今回は、Debianにインストールしたmono 2.4上で実行します。

    2008年7月 2日

    DotNetBar 7.4.0.0 リリース DotNetBar 7.4.0.0 リリース

    Visual Studio風やOffice 2007風のGUIを作成することができるDevComponents社のDotNetBarのv7.4がリリースされました。

    今回はCrumbBarと呼ばれるWindows Vistaのエクスプローラーにあるアドレスバーのようなコントロールが追加されている。

    DotNetBar 7.4 CrumbBar Control

    詳しくはDevComponents : CrumbBar Horizontal Tree Control(英語)

    2008年2月 7日

    DotNetBar for Windows Forms v7.2リリース DotNetBar for Windows Forms v7.2リリース

    DevComponents社のDotNetBar for Windows Formsのv7.2がリリースされている。

    DotNetBarはタブ形式のドキュメントやリボンバー、ドッキングウィンドウ等でWindows FormをOfficeやVisual Studio.NETライクにすることができるGUIコンポーネント。

    多少癖があるが、VisualStudio.NET 2003の頃から販売されていて確実にバージョンアップを繰り返している。

    最新バージョンの入手は数年前からサブスクリプション契約(1年単位)をすることが必要になってしまった。

    今回のバージョンアップでは、コマンドルーティングの基本機能がICommandインターフェースとICommandSourceインターフェースおよびCommandManagerクラスによってサポートされたことが大きい。

    これは、メニューアイテムやツールバーボタンなどのコマンド起動元と実際のコマンド処理を分離して実装できる機能で、それなりに大規模なアプリケーションを作成する場合には必須だ。

    実際これまでDotNetBarを使用する場合は、自前のコマンドルーティング フレームワークを作成して組み込む必要があった。

    ComponentSourceで円で買うこともできる。

    2007年12月13日

    Mono 1.2.6 がリリースされSilverlight 1.1サポート Mono 1.2.6 がリリースされSilverlight 1.1サポート

    最近あまり話題になっていない(勝手にそう思っている)Monoの1.2.6がリリースされている。
    MonoはLinux上でも動作する.NET Frameworkのオープンな実装です。

    リリース情報の詳細は、Mono 1.2.6 Release, 2007

    Mono 1.2.6の主な変更点

    • Mono 1.2.6 can now be used as an SDK for creating Silverlight 1.1 applications on all platforms.
    • This allows developers to create applications that target Silverlight without requiring a Windows installation.
    • Native Windows.Forms driver for MacOS X allows Winforms-based applications to run without an X server.
    • Support for the ASP.NET AJAX APIs and controls.
    • Support for FastCGI deployments: ASP.NET can now be deployed on a multitude of servers that implement the FastCGI protocol (lighttpd for example) in addition to Apache.
    • Windows.Forms now supports the WebControl on Windows and Linux using Mozilla.
    • Runtime will now consume much less memory for 2.0-based applications due to various optimizations in generics support as well as including many new performance improvements and an updated verifier and an implementation of CoreCLR security.
    • C# compiler is quickly approaching full 3.0 support, most of the basics work right now (except support for System.Query.Expression AST generation).

    Silverlight 1.1用のアプリケーションを作成できるSDKとして使えるようだ。
    MacOS X でX無しにWindows Formを動かせるのは面白い。(試す環境がない orz)
    C# 3.0のLINQ対応もgood。

    しかし、ASP.NET 2.0をApache2でホストしたときにどうも不安定だったのが治っているか試さなきゃ。

    2007年11月 8日

    IE6 SP2 で ClickOnce ( Apache 2 ) IE6 SP2 で ClickOnce ( Apache 2 )

    XPのいくつかのPCでどうにもClickOnceを使用した配置が失敗する現象がありはまった。
    Web Server がLinux (Debian Etch)でApache2なため余計に分からなかった。
    ちなみにIE7ではどうも発生しない。

    現象としては、applicationマニフェストファイルの内容がXMLとして表示されてしまう。
    調べると、サーバー側のMIMEタイプを正しく設定する事があげられている。

    MIMEタイプの設定をする

    Debianの場合は /etc/mime.types を編集して3つのエントリを追加する。

    application/x-ms-application application
    application/x-ms-manifest manifest
    application/octet-stream deploy

    この時点で多分IE7はOKになるがIE6はだめ。
    ではクライアント側のMIME設定を調べるとこれも正しい(.NEt Framework 2.0のインストール時に設定される)。
    トラブルシューティングとしてMSDNには .net の再インストールが挙げられているが、これをしてもだめ。結局原因はIE6だった。

    IE6のセキュリティー設定を変更する

    IE6 SP2はMIMEタイプを無視する設定がデフォルトで有効になっている。
    ダウンロードされたコンテンツの先頭何百バイトかで表示方法を勝手に変えてしまう。
    (実はこの事は知っていたのだが)

    この機能を無効にするには、IE6でインターネットオプションを開き、セキュリティータブを選択する。
    該当するエリアを選びカスタマイズボタンを押す。
    下の方に「拡張子ではなく,内容で開く」があるのでこれを無効化する。
    (自分のIE6環境では既に設定済みだったので分からなかった)

    これで無事にインストールされる。