[C#]アセンブリの厳密署名(FxCop:CA2209)
FxCop指摘の改修
マイクロアドBTパートナーはブログやサイトに貼るだけ。お小遣いをゲットしよう!
前回 、Windowsフォームアプリケーションを作成した時点ででるwarningが3つあると説明した。
今回はコレの直し方。
(基本的にFxCopのDocuumentationに載っているが英語だし。。)
[warning①]
[Location not stored in Pdb] : warning CA2209 : Microsoft.Usage : No valid permission requests were found for assembly 'FxCopTest'. You should always specify the minimum security permissions using SecurityAction.RequestMinimum.
■指摘内容
アセンブリに最低限のセキュリティを指定する属性がみつかりません。
ので、指定しなさい。
■修正方法
アセンブリに署名を設定する。
「プロジェクトのプロパティ」→「署名」→「アセンブリの署名」→「厳密な名前キーの作成」
(パスワードはなくてもよい。名前は任意)
これにより、ソリューションエクスプローラ内に「***.snk」というファイルが生成される。
■説明
MSDNでは以下の説明がされている。
-------------------------------------------------------------------------------
アセンブリに厳密な名前で署名することにより、名前をグローバルに一意にすることができます。
具体的には、厳密な名前は次の要件を満たします。
厳密な名前は、一意なキー ペアに依存することにより、名前の一意性を保証します。ある秘密キーを使用して生成されたアセンブリの名前は、別の秘密キーを使用して生成されたアセンブリの名前とは異なるため、同じアセンブリ名を元の秘密キーの所有者以外の人が生成することはできません。
厳密な名前は、アセンブリのバージョン系統を保護します。厳密な名前を付けることにより、アセンブリの作成者以外の人が、そのアセンブリの後続バージョンを作成することはできなくなります。そのため、ユーザーが読み込んでいるアセンブリのバージョンの発行者が、アプリケーションのビルドに使用されたバージョンの発行者と同じであることが保証されます。
厳密な名前を付けることで、厳密な整合性チェックが実行されます。.NET Framework のセキュリティ チェックにパスすることで、そのアセンブリの内容が作成されて以来変更されていないことが保証されます。ただし、厳密な名前そのものが、デジタル署名やサポートされている証明書によって実現されるのと同レベルの信頼性を示すわけではありません。
-------------------------------------------------------------------------------
簡単に言うと、アセンブリ(exeとかdll)にデジタル署名をくっつけましょう。
これにより、たとえアセンブリが解析されて改造されたものを公開されたとしても
オリジナルの署名は真似できないから作成元は保証されますよ、ってことだと思う。
作成された署名ファイル(*.snk)を見てみたらバイナリの羅列だったので何かしらの
暗号化がされてアセンブリにリンクされているのだと思うが詳しくはしらない。
[C#]ファイルパスからの情報取得
ファイルパス文字列からファイル名や拡張子を取得する
マイクロアドBTパートナーはブログやサイトに貼るだけ。お小遣いをゲットしよう!
ファイルパスを持ったstring文字列からファイル名や拡張子を取得するには
System.IO.Path の名前空間を使用する。
[ファイル名取得]
string fileName = System.IO.Path.GetFileName(path);
[拡張子名取得]
string fileExt = System.IO.Path.GetExtension(path);
[ディレクトリ取得]
string dir = System.IO.Path.GetDirectoryName(path);
[拡張子を除いたファイル名]
string fileName = System.IO.Path.GetFileNameWithoutExtension(path);
他にもランダムなファイル名を取得したり、ルートディレクトリを取得したり。
ファイルIO関連ではお世話になるはず。
[C#]スペシャルフォルダー
スペシャルフォルダを取得する
マイクロアドBTパートナーはブログやサイトに貼るだけ。お小遣いをゲットしよう!
string specialDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
SpecialFolder.~~
「~~」の部分に各プロパティを入れたときに取得されるディレクトリは
以下のようになった。
(Vista環境。XPはしりません。)
[ApplicationData]
C:\Users\user\AppData\Roaming
[CommonApplicationData]
C:\ProgramData
[CommonProgramFiles]
C:\Program Files\Common Files
[Cookies]
C:\Users\user\AppData\Roaming\Microsoft\Windows\Cookies
[Desktop]
C:\Users\user\Desktop
[DesktopDirectory]
C:\Users\user\Desktop
[Favorites]
C:\Users\user\Favorites
[History]
C:\Users\user\AppData\Local\Microsoft\Windows\History
[InternetCache]
C:\Users\user\AppData\Local\Microsoft\Windows\Temporary Internet Files
[LocalApplicationData]
C:\Users\user\AppData\Local
[MyComputer]
表示なし
[MyDocuments]
C:\Users\user\Documents
[MyMusic]
C:\Users\user\Music
[MyPictures]
C:\Users\user\Pictures
[Personal]
C:\Users\user\Documents
[ProgramFiles]
C:\Program Files
[Programs]
C:\Users\user\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
[Recent]
C:\Users\user\AppData\Roaming\Microsoft\Windows\Recent
[SendTo]
C:\Users\user\AppData\Roaming\Microsoft\Windows\SendTo
[StartMenu]
C:\Users\user\AppData\Roaming\Microsoft\Windows\Start Menu
[Startup]
C:\Users\user\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
[System]
C:\Windows\system32
[Templates]
C:\Users\user\AppData\Roaming\Microsoft\Windows\Templates
[C#]TabPageの遷移制御
TabPageの遷移を制御する
[環境]
VisualStudio2008
C# Windowsフォームアプリケーション
マイクロアドBTパートナーはブログやサイトに貼るだけ。お小遣いをゲットしよう!
TabPageの遷移を制御する際、以下のイベントハンドラに制御コードを記述する。
・Deselected
・Deselecting
・Selecting
・Selected
・他
TabPageが特定の条件下では遷移しないようにする際は以下のような感じで。
private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
if (何かの条件)
{
e.Cancel = true;
}
}
TabControlCancelEventArgs のCancelプロパティにtrueを設定すると、現在
遷移しようとしている動作をキャンセルする。
[日記]いいかげん
Vistaがうざくなってきた。
HomePremiumではリモートデスクトップのクライアントになれないし、
シリアル通信のサンプルコード作ってみようと思ったら今度は
ハイパーターミナルがないときた。
無駄にUIばかりきれいにして動作は重い。
使い勝手もXPとは雲泥の差。
DELLでXPにダウングレードしてメモリ4G積んだノートが7万台で買えるみたいだけど
これかなり欲しい。