Silverlight で XNA のコンテンツプロパインを使うためのプロジェクトファイルへの追加書き込み

なんか毎回忘れているのでメモ書き。

csproj ファイルをテキストファイルで開き、Project タグ以下に以下のタグを追加する。

<PropertyGroup>
   <XnaContentProject>..XXXXSampleContentProjectXXXXSampleContentProject.contentproj</XnaContentProject>
</PropertyGroup>
<Target Name="BeforeBuild">
   <MSBuild Projects="$(XnaContentProject)" Properties="XnaContentPipelineTargetPlatform=Windows;XnaContentPipelineTargetProfile=Reach" />
   <CreateItem Include="$(XnaContentProject)">
     <Output TaskParameter="Include" ItemName="XnaContentProjectItem" />
   </CreateItem>
   <CreateProperty Value="%(XnaContentProjectItem.RelativeDir)">
     <Output TaskParameter="Value" PropertyName="XnaContentProjectPath" />
   </CreateProperty>
   <CreateItem Include="$(XnaContentProjectPath)cachefile*targetpath.txt">
     <Output TaskParameter="Include" ItemName="XnaContentCacheFile" />
   </CreateItem>
   <ReadLinesFromFile File="@(XnaContentCacheFile)" Condition="Exists(@(XnaContentCacheFile))">
     <Output TaskParameter="Lines" ItemName="XnaContentOutputs" />
   </ReadLinesFromFile>
   <CreateItem Include="@(XnaContentOutputs->'$(XnaContentProjectPath)binAnyCPU$(Configuration)%(Identity)')" AdditionalMetadata="Link=Content%(RelativeDir)%(Filename)%(Extension)">
     <Output TaskParameter="Include" ItemName="Content" />
   </CreateItem> </Target>

ただし、プロジェクトをビルドしたりなんかしているといつの間にか以下のようなコメントが csproj ファイルの中に追加されていて、前に追加したタグもすべてコメントアウトされていることがある。

To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets.

実はコメントアウトされたタグの下にまったく同じタグが再度追加されているが、なぜかこのコメントアウトされたものが残っていると正しくコンテンツパイプラインが動作しない。なのでコメントをすべて削除して再ビルドする必要がある。

メモ書きなので環境によっては動作が異なる場合があるので注意してください。

]]>

Windows ストアアプリのデバッグ実行で認証関連のエラーで起動できなくなった時の対処法

環境

  • Windows 10
  • Visual Studio 2015
  • Windows ストアアプリ 8.1 UWP

内容

あるタイミングで Visual Studio から Windows ストアアプリをデバッグ実行しようとしたときにエラーが発生して実行できなくなったので、それの対処法を書いておきます。

デバッグ実行しようとすると、ストアアプリのウィンドウは表示されるけど、その後エラーダイアログが表示されてアプリケーションが終了してしまいます。ダイアログの表示内容は

Windows ストア アプリ '{GUID}!App' をアクティブにできません。{AppName}.Windows.exe プロセスが開始されましたが、アクティベーション要求がエラー 'アプリは開始されませんでした' で失敗しました。

という内容です。(キャプチャ忘れました。)

一応この件についてヘルプを見ろという指示がでるので、見てみると以下の URL に誘導されます。

そこではイベントビューアーを使ってログの内容を見ろという内容が書かれているので、ログを確認してみました。すると内容は

エラー アプリは開始されませんでした。 によりアプリ {GUID}!App を Windows.Launch コントラクトに対してライセンス認証できませんでした。

と書かれていました。文章がおかしい気もしますが、ライセンスやアクティベーションがらみでのエラーと読み取ることができます。

ですが、Microsoft アカウントや Visual Studio の認証系を一通りチェックしたのですが、エラーはなくなりませんでした。仕方ないのでエラーメッセージをもとに調べてみると「bin フォルダを削除しろ」というお達しを見つけたので、指示通りに削除して再実行したところ正常に起動できるようになりました。

私の環境では複数の PC でファイルを同期させているのですが、 bin フォルダ内も対象であるため、ほかの PC の認証情報が別 PC にコピーされて、それで正常に起動できなくなったのかもしれません。

]]>

[SSRS] レポートマネージャーでレポートがサブスクリプションによって自動エクスポートされたときのログを確認する

メモ書きです。

環境

  • SQL Server : SQL Server 2008 R2

内容

ログを確認すると、エクスポートされたレポートの種類や、エクスポートにかかった時間、結果、出力サイズ、行数などが参照できます。

ログを確認するには SQL Server Reporting Services をインストールした時に作成されるデータベース「ReportServer」のテーブルを参照します。

以下の SQL を実行するとログの内容を確認できます。

use [ReportServer];
select
  B.[Path]                -- レポートのパスと名前
 ,A.[LogEntryId]
 ,A.[InstanceName]        -- レポートサーバーインスタンス名
 ,A.[ReportID]
 ,A.[UserName]            -- 実行ユーザー
 ,A.[ExecutionId]
 ,A.[RequestType]
 ,A.[Format]
 ,A.[Parameters]          -- レポートの出力に指定したパラメーター
 ,A.[ReportAction]
 ,A.[TimeStart]           -- 出力を開始した時間
 ,A.[TimeEnd]             -- 出力が完了した時間
 ,A.[TimeDataRetrieval]   -- データの取得にかかった時間 (単位はミリ秒)
 ,A.[TimeProcessing]      -- レポートの処理にかかった時間 (単位はミリ秒)
 ,A.[TimeRendering]       -- レポートの表示にかかった時間 (単位はミリ秒)
 ,A.[Source]
 ,A.[Status]              -- rsSuccess(成功) またはエラー コード
 ,A.[ByteCount]           -- レポートのファイルサイズ
 ,A.[RowCount]            -- クエリ結果の行数
from [ExecutionLogStorage] A
inner join [Catalog] B
  on B.[ItemID] = A.[ReportID]
where convert(varchar(8), A.[TimeStart], 112) = '20151104'  -- いつのデータを取得したいか、などの条件
order by A.[LogEntryId] desc;

各パラメータの詳しい情報などは以下の URL 先を参照してください。SharePoint について書かれていますが、内部では Reporting Service を使っているので大体同じです。

]]>

ビルド時に「MakePRI : warning 0xdef00520: Invalid qualifier」の警告がでる原因

メモです。

「.NET for Windows Store apps」を参照しているプロジェクトにおいてビルドすると「MakePRI : warning 0xdef00520: Invalid qualifier:xxxxx」という警告がでる場合があります。

原因がわからなく、そのままでも問題なかったので放置していたのですが、原因がわかりました。

プロジェクト内にファイル名が「xxx.xxxx.xx.txt」のように複数のピリオドを持つファイルが含まれていると警告が出るようです。ファイル名を変えたらでなくなりました。

]]>

[XAML] 数字で始まるフォルダを作成して埋め込まれたリソースをいれるとパスがかわる

ちょっとハマってしまったのでメモ。

ソリューションのフォルダ構成で「XXXX/YYYY/000_ZZZZ」みたいなフォルダを作り、「000_ZZZZ」フォルダの中にリソース(XAMLとかmp3とか)を入れていました。リソースは「埋め込まれたリソース」として登録し、実行時に動的に読み込むようにしました。

この場合は「Assembly.GetManifestResourceStream」メソッドで読み込むことになるのですが、パス指定では以下の注意点が挙げられます。

  • パス区切り文字は「. (ピリオド)」になる
  • パスの最初に「名前空間」をいれ、ピリオドを挟んだ後プロジェクトのルートからの相対パスを書く
  • 大文字小文字は区別される

一応これらを注意して書いたのですが、実行時にどうしても null が返ってきてしまいます。

どうしてもわからなかったので「Assembly.GetManifestResourceNames()」メソッドで中身を調べてみたところフォルダのパスが「XXXX.YYYY._000_ZZZZ」のようになっていて数字から始まっているフォルダ名の最初に「_ (アンダースコア)」が追加されていました。とりあえず読込パスを同じようにアンダースコアを入れてみたところ正常に読む込むことができました。

ハマりそうなので注意が必要ですね。

]]>

ASP.NET MVC アプリケーションをデバッグ実行したときに「CultureNotFoundException」が発生する現象を回避する

環境

  • Visual Studio 2013
  • .NET Framework 4
  • ASP.NET MVC 3 (or 4)

現象

いつのころからか、ASP.NET MVC アプリケーションをデバッグ実行しようとすると図のような「CultureNotFoundException」の例外が発生する様になりました。

1

このまま続行して動かしても全く問題ないのですが、デバッグ実行するたびに出てくるので (100% ではないが7~8割) 結構煩わしいです。

海外サイトを調べてみると「C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Files」フォルダを削除すると直るような記述はあったのですが、それっぽいフォルダが削除してみましたが直りませんでした。(フォルダ名が若干違う)

現状例外を直接発生しないようにする方法が見つからなかったので、ここでは例外が発生してもそのまま無視できる方法について記載しています。この方法を試す場合は、例外を無視しても問題ない場合に行ってください。

手順

Visual Studio を起動したらメニューの「デバッグ」から「例外」を選択します。

2

右の「追加」ボタンをクリックします。

3

「新しい例外」ダイアログが表示されたら、型から「Common Language Runtime Exceptions」を選択し、例外名に「System.Globalization.CultureNotFoundException」と入力して OK ボタンをクリックします。

4

一覧に「System.Globalization.CultureNotFoundException」が表示されていることを確認し、例外が発生しても一時停止されないように「スローされるとき」のチェックを外します。OK ボタンをクリックし、実行しても例外で一時停止されないか確認してみてください。

5

]]>

[C#] string.Trim メソッドでは「」を除去できない

メモ書きです。

あるプログラムで .aspx ファイルをいじっていて、そのファイルを直接プログラムで読み込んでみたらいくつかの行末に「」が付加されていました。原因はわかりませんがたぶんエンコードの問題ではないかと思います。

読み込んだ文字列は string.Trim を掛けていたので問題ないと思っていたのですが、処理上問題が発生していてデバッグしてみたら文字列の最後に「」が付いていたのが問題だったみたいです。string.Trim メソッドでは「」を削除できないようなので以下のようにして削除しました。

text.Replace("", "");
]]>

System.Windows.Media.Color の「scRGB」ってなんだ?

現在公開しているツール「ちーたんタッチボード」では、色情報を 0.0 ~ 1.0 の小数で持っているのですが、プログラムで ARGB として設定する際に 0 ~ 255 形式に変換する必要がありました。しかし、小数↔整数 の変換には誤差がつきものなのでどうにかならないのかなと思っていたのですが、WPF で使用されている System.Windows.Media.Color に「ScA」「ScR」のようなプロパティがあるのを見つけました。

MSDN で調べてみると渡す値は 0 ~ 1 と書いてあったので「0 ~ 255 の代わりに 0.0 ~ 1.0 の線形補間で色情報を渡せるんだ」と思い込んでしまったのが悪夢の始まりでした。

実は現在公開しているちーたんタッチボード Ver 0.23 では背景や文字の色設定を行うと設定するたびに微妙に色が変わったりする不具合が存在しています。もうお分かりかと思いますが、上記の誤解により発生している不具合です。(次に公開する Ver 0.30 では治ってます^^;)

当時原因がよくわからなくてほかのライブラリが原因なのではないかとか思ったりしていたのですが、最終的に Color 構造体に秘密があるのではないかと思い、値設定後の各パラメータのダンプを取ってみました。以下は ScX プロパティに 0.01 ずつ設定したものです。

A R G B ScA ScR ScG ScB
0 0 0 0 0.00 0.00 0.00 0.00
3 25 25 25 0.01 0.01 0.01 0.01
5 39 39 39 0.02 0.02 0.02 0.02
8 48 48 48 0.03 0.03 0.03 0.03
10 56 56 56 0.04 0.04 0.04 0.04
13 63 63 63 0.05 0.05 0.05 0.05
15 69 69 69 0.06 0.06 0.06 0.06
18 75 75 75 0.07 0.07 0.07 0.07
20 80 80 80 0.08 0.08 0.08 0.08
23 85 85 85 0.09 0.09 0.09 0.09
26 89 89 89 0.10 0.10 0.10 0.10
28 93 93 93 0.11 0.11 0.11 0.11
31 97 97 97 0.12 0.12 0.12 0.12
33 101 101 101 0.13 0.13 0.13 0.13
36 105 105 105 0.14 0.14 0.14 0.14
38 108 108 108 0.15 0.15 0.15 0.15
41 111 111 111 0.16 0.16 0.16 0.16
43 115 115 115 0.17 0.17 0.17 0.17
46 118 118 118 0.18 0.18 0.18 0.18
48 121 121 121 0.19 0.19 0.19 0.19
51 124 124 124 0.20 0.20 0.20 0.20
54 126 126 126 0.21 0.21 0.21 0.21
56 129 129 129 0.22 0.22 0.22 0.22
59 132 132 132 0.23 0.23 0.23 0.23
61 134 134 134 0.24 0.24 0.24 0.24
64 137 137 137 0.25 0.25 0.25 0.25
66 139 139 139 0.26 0.26 0.26 0.26
69 142 142 142 0.27 0.27 0.27 0.27
71 144 144 144 0.28 0.28 0.28 0.28
74 147 147 147 0.29 0.29 0.29 0.29
77 149 149 149 0.30 0.30 0.30 0.30
79 151 151 151 0.31 0.31 0.31 0.31
82 153 153 153 0.32 0.32 0.32 0.32
84 155 155 155 0.33 0.33 0.33 0.33
87 158 158 158 0.34 < /td> 0.34 0.34 0.34
89 160 160 160 0.35 0.35 0.35 0.35
92 162 162 162 0.36 0.36 0.36 0.36
94 164 164 164 0.37 0.37 0.37 0.37
97 166 166 166 0.38 0.38 0.38 0.38
99 168 168 168 0.39 0.39 0.39 0.39
102 170 170 170 0.40 0.40 0.40 0.40
105 172 172 172 0.41 0.41 0.41 0.41
107 173 173 173 0.42 0.42 0.42 0.42
110 175 175 175 0.43 0.43 0.43 0.43
112 177 177 177 0.44 0.44 0.44 0.44
115 179 179 179 0.45 0.45 0.45 0.45
117 181 181 181 0.46 0.46 0.46 0.46
120 182 182 182 0.47 0.47 0.47 0.47
122 184 184 184 0.48 0.48 0.48 0.48
125 186 186 186 0.49 0.49 0.49 0.49
128 188 188 188 0.50 0.50 0.50 0.50
130 189 189 189 0.51 0.51 0.51 0.51
133 191 191 191 0.52 0.52 0.52 0.52
135 192 192 192 0.53 0.53 0.53 0.53
138 194 194 194 0.54 0.54 0.54 0.54
140 196 196 196 0.55 0.55 0.55 0.55
143 197 197 197 0.56 0.56 0.56 0.56
145 199 199 199 0.57 0.57 0.57 0.57
148 200 200 200 0.58 0.58 0.58 0.58
150 202 202 202 0.59 0.59 0.59 0.59
153 203 203 203 0.60 0.60 0.60 0.60
156 205 205 205 0.61 0.61 0.61 0.61
158 206 206 206 0.62 0.62 0.62 0.62
161 208 208 208 0.63 0.63 0.63 0.63
163 209 209 209 0.64 0.64 0.64 0.64
166 211 211 211 0.65 0.65 0.65 0.65
168 212 212 212 0.66 0.66 0.66 0.66
171 214 214 214 0.67 0.67 0.67 0.67
173 215 215 215 0.68 0.68 0.68 0.68
176 216 216 216 0.69 0.69 0.69 0.69
179 218 218 218 0.70 0.70 0.70 0.70
181 219 219 219 0.71 0.71 0.71 0.71
184 221 221 221 0.72 0.72 0.72 0.72
186 222 222 222 0.73 0.73 0.73 0.73
189 223 223 223 0.74 0.74 0.74 0.74
191 225 225 225 0.75 0.75 0.75 0.75
194 226 226 226 0.76 0.76 0.76 0.76
196 227 227 227 0.77 0.77 0.77 0.77
199 229 229 229 0.78 0.78 0.78 0.78
201 230 230 230 0.79 0.79 0.79 0.79
204 231 231 231 0.80 0.80 0.80 0.80
207 232 232 232 0.81 0.81 0.81 0.81
209 234 234 234 0.82 0.82 0.82 0.82
212 235 235 235 0.83 0.83 0.83 0.83
214 236 236 236 0.84 0.84 0.84 0.84
217 237 237 237 0.85 0.85 0.85 0.85
219 239 239 239 0.86 0.86 0.86 0.86
222 240 240 240 0.87 0.87 0.87 0.87
224 241 241 241 0.88 0.88 0.88 0.88
227 242 242 242 0.89 0.89 0.89 0.89
230 243 243 243 0.90 0.90 0.90 0.90
232 245 245 245 0.91 0.91 0.91 0.91
235 246 246 246 0.92 0.92 0.92 0.92
237 247 247 247 0.93 0.93 0.93 0.93
240 248 248 248 0.94 0.94 0.94 0.94
242 249 249 249 0.95 0.95 0.95 0.95
245 250 250 250 0.96 0.96 0.96 0.96
247 252 252 252 0.97 0.97 0.97 0.97
250 253 253 253 0.98 0.98 0.98 0.98
252 254 254 254 0.99 0.99 0.99 0.99
255 255 255 255 1.00 1.00 1.00 1.00

見事に線形ではありませんでした。

よくよく調べてみると ARGB のほうは sRGB という規格、ScA ScR ScG ScB のほうは scRGB という規格らしいです。scRGB については以下のサイトなどを参考にしてください。簡単にまとめると、sRGB(8bit) では表現できなかった色を 12bit や 16bit などに拡張してより多くの色情報を表現できるようにしたものです。

しかし、いろいろ調べてみても sRGB と scRGB の変換方法がよくわからなかったのでコードベースで情報がないか調べてみたところ以下のサイトがありました。

確かにこのコードに当てはめると Color 構造体で出力された結果と一致しました。ですが、この変換処理と scRGB について書かれている公式との関連性がよくわかりませんでした。Microsoft が独自に定義したものかもしれませんが、それについても文面を見つけることができませんでした。

まあとりあえず現状は 0.0~1.0 と 0~255 は単純に線形変換させて対応することにし、scRGB については今回の記事で参考になったという形にとどめておきたいと思います。なにか詳しい情報があればコメントいただければと思います。

]]>

Crystal Reports でデータベース フィールドの項目を最新にする (DataSet 版)

環境

  • Visual Studio : Visual Studio 2008
  • Crystal Reports : Crystal Reports Basic for Visual Studio 2008

概要

Crystal Reports のデータベース フィールドに DataSet のテーブルをバインドした後に、DataSet のテーブルの項目を変更してもデータベース フィールドには自動的に反映されません。最新の状態を反映させるには以下の手順を行います。

手順

  1. DataSet のテーブルの構成(列など)を変更
  2. 対象のプロジェクトをビルド
  3. Crystal Reports のフィールド エクスプローラーから「データベース フィールド」を右クリックし、「データベースの照合」を選択
  4. 確認ダイアログで「OK」をクリック
]]>

ASP.NET アプリケーションをデバッグ実行したときに「AspAccessCheck~.tmp」へのアクセス拒否のエラーに対処する

メモ書きです。

環境

  • Visual Studio 2013
  • .NET Framework 4.5

内容

原因がよくわかっていないのですが、Visual Studio で ASP.NET アプリケーションをデバッグ実行したときに以下のエラー(例外)が表示されて、その後の処理が正常に行われない現象が発生する場合があります。

型 'System.UnauthorizedAccessException' の初回例外が mscorlib.dll で発生しました

追加情報:パス 'C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Files~AspAccessCheck_71d98a9c21352.tmp' へのアクセスが拒否されました。

※「71d98a9c21352」はたぶん一時的に決められた値

これを解決するには「C:WindowsMicrosoft.NETFrameworkv4.0.30319」フォルダにある「Temporary ASP.NET Files」フォルダを削除してしまいます。たぶんフォルダの中には何も入っていないはずです。削除後デバッグ実行すると正常に動作する場合があります。(実行しても Temporary ASP.NET Files フォルダは作成されないようです)

]]>