2010年6月25日金曜日

.NET Integer型配列をString配列に変換するには Fw3.5~

Framework3.5以上 ラムダ式を使用して
Integer型配列をString配列に変換します。

Dim aryInt() As Integer = {1, 2, 3, 4, 5}
Dim aryStr() As String

aryStr = Array.ConvertAll(Of Integer, String)(aryInt, Function(i As Integer) i.ToString)

または
Framework3.5以上 LinqのSelectメソッドを使用して
Integer型配列をString配列に変換します。
Dim aryInt() As Integer = {0, 1, 2, 3, 4}
Dim aryStr() As String

aryStr = aryInt.Select(Of String)(Function(i) i.ToString).ToArray()

2010年6月4日金曜日

.NET 構成ファイルapp.configの暗号化

キーの配布などがなく、複号化の手間がない方法でapp.configのセクションを暗号化する方法です。

キーの配布をしたくないので、ユーザマシンでインストール時にapp.configを暗号化します。
復号化は自動でやってくれるので、app.configから値を取得するコードは変更しなくても大丈夫です。



app.configのappSettingsセクションとConnectionStringsセクションを暗号化するサンプルです。

1、まずWindowsアプリケーションを作成し、appSettingsセクションとConnectionStringsセクションのあるapp.configを用意します。
<configuration>

  <appsettings>
    <add key="PASSWORD" value="ABCDEFGHIJKLMN">
  </appsettings>
  
  <connectionstrings>
    <add connectionstring="user id=username;password=pswd;data source=mydb" name="DB1" providername="System.Data.OracleClient">
  </connectionstrings>
  
  …省略…
  
</configuration>

2、インストーラで実行するカスタム動作を定義したクラスを作成します。
同じソリューションに新しいクラスライブラリのプロジェクトを作成します。
参照設定に「System.Configuration.dll」と「System.Configuration.Install.dll」を追加します。
そして「System.Configuration.Install.Installer」クラスを継承したクラスを作成します。
Imports System.Configuration

<system.componentmodel.runinstaller(true)> _
Public Class Class1
    Inherits System.Configuration.Install.Installer

    Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)
        MyBase.Install(stateSaver)

        Call CryptographyAppConfig()
    End Sub

    ''' <summary>
    ''' app.configのセクションを暗号化します。
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub CryptographyAppConfig()
        Dim sProtectedProvider As String = "DataProtectionConfigurationProvider"

        ' インストール先の情報を取得
        Dim targetDir As String = Me.Context.Parameters("targetdir")
        Dim appNmae As String = Me.Context.Parameters("appname")

        'app.config
        Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(targetDir + appNmae)

        'app.configのセクションを暗号化
        Dim sec1 As ConfigurationSection = config.GetSection("appSettings")
        sec1.SectionInformation.ProtectSection(sProtectedProvider)
        sec1.SectionInformation.ForceSave = True

        Dim sec2 As ConfigurationSection = config.GetSection("connectionStrings")
        sec2.SectionInformation.ProtectSection(sProtectedProvider)
        sec2.SectionInformation.ForceSave = True

        config.Save(ConfigurationSaveMode.Full)

    End Sub
End Class

3、セットアッププロジェクトを作成します。
同じソリューションにセットアッププロジェクトを追加し、アプリケーションフォルダに
1で作成したWindowsアプリケーションのプライマリ出力
2で作成したクラスライブラリのプリマり出力を追加します。


次にセットアッププロジェクトの「カスタム動作エディタ」を開き「インストール」ノードを右クリック「カスタム動作の追加」を選択します。
「アプリケーションフォルダ」からクラスライブラリのプリマり出力を選択します。
追加したカスタム動作のCustomActionDataプロパティに/targetdir="[TARGETDIR]/" /appname="WindowsApplication2.exe"を設定します。
※appnameは1で作成したWindowsアプリケーションのexeを指定してください。


以上で設定は終了です。
作成したセットアッププロジェクトでインストールを実行すると、app.configが暗号化されています。

2010年6月3日木曜日

.NET Sandcastleを使用してXMLコメントからヘルプを作成する。

Sandcastleを使用してXMLコメントからヘルプを作成する方法です。


まず必要なツールをダウンロードしインストールします。
Sandcastle Ver 2.4.10520よりSandcastle.msiをダウンロードし、インストールします。
HTML Help Workshop and Documentation Ver 1.32よりhtmlhelp.exeをダウンロードし、インストールします。
Sandcastle Help File Builder Ver 1.8.0.3をダウンロードし、インストールします。


すべてのプログラムより「Sandcastle Help File Builder」→「Sandcastle Help File Builder GUI」選択してSandcastle Help File Builder起動します。

「File」メニューの「New Project」を選択します。
ファイル保存ダイアログが表示されますので、ヘルププロジェクト名をつけて保存ボタンをクリックします。
※パスに日本語が含まれるとビルド時にエラーになってしまうようです。


「Porject Explorer」の「Documentation Sources」を右クリックし「Add Documentation Source…」をクリックします。
ファイル選択ダイアログが表示されますので、ヘルプファイルを作成したいソリューションやプロジェクト、exe、dllなどを選択します。

「Project Properties」の
「Help File」セクションの「Language」を日本語(日本)にします。
「Help File」セクションの「HtmlHelpName」にビルドすると作成されるヘルプファイル(chm)名を入力します。
「Visibility」セクションの「DocumentInheritedFrameworkMembers」Frameworkのクラスから継承したメンバを出力しない場合はFalseを設定します。
「Comments」セクションの「NamespaceSummaries」名前空間の説明を設定します。


「Documentation」メニューの「Build Project」を選択するとビルドが始まります。
ビルドが終了すると、ヘルププロジェクトフォルダの下に「Help」フォルダが作成され、そこに「HtmlHelpName」で指定したchmファイルが作成されます。