月別アーカイブ: 7月 2014

Inline クラスについて


WPF (RichTextBox の FlowDocument), Windows 8 Store app (RichTextBlock) の Inline クラスについて

[C#]

Paragraph paragraph = new Paragraph();
Run run = new Run();
run.Text = "テキスト";
paragraph.Inlines.Add(run);

RichTextBlock の Blocks プロパティー、またはRichTextBox.Document.Blocks プロパティー に Add メソッドで paragraph を追加します。


Blocks プロパティーの インデクサー[0] 等で 先頭の 項目 (先ほど追加した Paragraph クラス) を読み取ります。

SideBySide


.NET Framework 4.5.2 (KB2934520) を Windows 8.1 Update 1 x64 にインストールしましたが、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners\amd64_mscorlib_b77a5c561934e089_none_e4f56f0db29b56f3 に新しいバージョン 4.0.9600.20681 が登録されません (4.0.9600.17187は登録されています)。

SideBySide に登録されている もっとも数字の大きいバージョン のみ %SystemRoot%\WinSxS\ フォルダー(コンポーネントストア)に存在するファイルの圧縮が行われていないようです。

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing
  • HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components
  • %SystemRoot%\WinSxS

上記の箇所に正しく登録されています。

%SystemRoot%\WinSxS\amd64_mscorlib_b77a5c561934e089_4.0.9600.20681_none_2ee67d446c970795 フォルダーのファイルは圧縮(MSDelta compression)されています。mscorlib.lib のバージョンは 4.0.30319.34209 です。

%SystemRoot%\WinSxS\amd64_mscorlib_b77a5c561934e089_4.0.9600.17187_none_45b39dca52f03d38 フォルダーのファイルは圧縮されていません。mscorlib.lib のバージョンは 4.0.30319.36213 です。

%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\mscorlib.lib は バージョン 4.0.30319.34209 のままです。


4.0.30319.34209 は GDR、4.0.30319.36213 は LDR なので特に問題ないようです。

Framework のインデクサー


C# では プロパティ名に this, C++/CLI では default を使用します。

アプリケーション設定


アプリケーション設定について

http://dobon.net/vb/dotnet/programing/applicationsettingsbase.html

配列を保存する方法を紹介します。


[global::System.Configuration.SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Binary)] を追加します。


[global::System.Configuration.SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Binary)] が削除される場合

Visual Studio IDE で Windows フォームアプリケーションを作成します。Settings.settings を選択して設定(string 型)を作成します。ここではsetting_1とします。C#の一例です。

[C#] 保存


System.Drawing.Color[] objects = new System.Drawing.Color[3];
objects[0] = System.Drawing.Color.Aqua;
objects[1] = System.Drawing.Color.Blue;
objects[2] = System.Drawing.Color.DarkGreen;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter fomatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream memorystream = new System.IO.MemoryStream();
fomatter.Serialize(memorystream, objects);
Properties.Settings.Default.setting_1 = Convert.ToBase64String(memorystream.ToArray());
memorystream.Close();

[C#] 読み出し


System.Drawing.Color[] objects;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter fomatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream memorystream = new System.IO.MemoryStream(Convert.FromBase64String(Properties.Settings.Default.setting_1));
objects = (System.Drawing.Color[])fomatter.Deserialize(memorystream);
memorystream.Close();

objects へはキャストを行わなくても保存できます。

このほかに System.Collections.Specialized.StringCollection で作成して、Add, AddRange メソッドで追加する方法もあります。XML シリアル化では正しく保存できない事例があることがわかりました。配列を含むクラスを作成してそのクラスを保存する方法も int型、string型などは正しく保存できますが、Color構造体、ユーザーコントロール、独自のクラスを含むものは正しく保存できませんでした。

コンポーネントストア


DISM /Online /Cleanup-Image /RestoreHealth を実行すると、0x800f0906 エラーが発生する、またはcbs.logに Failed to repair store. [HRESULT = 0x800f0906 – CBS_E_DOWNLOAD_FAILURE] が書き込まれます

%SystemRoot%\servicing\Packages\wuindex.xml に Map Package=”Package_nn_for_KBxxxxxxx~31bf3856ad364e35~amd64~~6.3.1.0 のような要素が欠落していると発生するようです。

インターネット オプション の 信頼済みサイトに https://fe2.update.microsoft.com/ を追加します。https://fe2.update.microsoft.com/ からダウンロードできない場合でも発生します。

Windows Serverの信頼済みサイトには次のアドレスが追加されています。

Windows Update は http://download.windowsupdate.com/c/msdownload/update/software/updt/2/ から更新プログラムをダウンロードすることであります。

XmlSerializers


ファイルまたはアセンブリ ‘mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。

Windows 8.1 Update 1 x64, Vista SP2 x64、Windows XP の環境で %SystemRoot%\Microsoft.NET\Framework\v2.0.50727 フォルダーに System.Xml.XmlSerializer.dll, System.Xml.Serialization.dll, System.Reflection.dll ファイルが存在しません。


Visual Studio IDE のデバッガーを起動するとこのメッセージが表示されますが、”internal” に設定してあるのでこれは特に問題ありません。

Framework 4.0 は特に問題ありません。