回答編集履歴

4

Designer.csの自動生成について追記

2021/05/11 05:02

投稿

ttact
ttact

スコア170

test CHANGED
@@ -93,3 +93,19 @@
93
93
 
94
94
 
95
95
  カスタムツールの実行は面倒なので、将来的にはビルド前イベントに組み込みたいですね...
96
+
97
+
98
+
99
+ ---
100
+
101
+ 2021/05/11 追記2
102
+
103
+
104
+
105
+ Designer.csを自動生成するには、System.Resources.Tools.StronglyTypedResourceBuilderを使えばよいようです。
106
+
107
+ [Programmatically generate Designer.cs for resx file (ResXResourceWriter/ResXResourceReader)](https://stackoverflow.com/questions/3729255/programmatically-generate-designer-cs-for-resx-file-resxresourcewriter-resxreso)
108
+
109
+
110
+
111
+ ただしこれで生成したDesigner.csを、.resxと同時にプロジェクトに追加してしまうと、.resxとDesigner.csが別々のものとして認識されてしまいます(.csproj内で<AutoGen>等が付与されない等等)。なので、初回生成のときだけは.resxファイルのみを追加し、上記の通りカスタムツールを設定して自動生成し、StronglyTypedResourceBuilderは更新時のみ使うようにしたほうが(今わかっている範疇では)楽かなと思います。

3

フォルダに画像ファイルを追加したときの.resxアップデートについて記載

2021/05/11 05:02

投稿

ttact
ttact

スコア170

test CHANGED
@@ -63,3 +63,33 @@
63
63
  - ボタンのImageプロパティ等で、プロジェクトリソースファイル(P)のコンボボックスをhoge.resxにすれば、当該画像が選択でき、デザイナ上で表示される。
64
64
 
65
65
  - 何も気にしなくてもビルドすることで画像データは.exeに埋め込まれ、.exeのみで画像が表示される。
66
+
67
+
68
+
69
+ ---
70
+
71
+ 2021/05/11追記
72
+
73
+
74
+
75
+ hoge.resxをプロジェクトに追加してデザイナから画像を選択すると、hoge.Designer.csが作成されます。このDesigner.csの中には画像をSystem.Drawing.Bitmapとしてリソースバイナリストリームから復元するコードが自動生成されます。
76
+
77
+
78
+
79
+ ここで、hoge.resxをプロジェクトに追加した**後**に、フォルダ内に画像を追加したとします。
80
+
81
+
82
+
83
+ この場合、hoge.resxを更新する必要があることは無論ですが、Designer.csも更新する必要があります。hoge.resxを更新してDesigner.csを更新しない場合、デザイナ上で画像を選択すること自体は問題なく行えるのですが、ビルドすると「'XXXX'に'YYYY'の定義がありません」というコンパイルエラーが発生します。
84
+
85
+
86
+
87
+ このコンパイルエラーを防ぐには、以下のようにします。
88
+
89
+ - ソリューションエクスプローラー上でhoge.resxのプロパティを開き、「カスタム ツール」の欄に「ResXFileCodeGenerator」と入力する。この作業はhoge.resxを追加した際の1回のみ行えばよい。
90
+
91
+ - hoge.resxを(ツールで)更新する度に、ソリューションエクスプローラー上でhoge.resxを右クリックし「カスタム ツールの実行(L)」を行う。これによりDesigner.csが作り直される。
92
+
93
+
94
+
95
+ カスタムツールの実行は面倒なので、将来的にはビルド前イベントに組み込みたいですね...

2

ソースコードのnameがなんの説明もなかったので、追加

2021/05/11 00:08

投稿

ttact
ttact

スコア170

test CHANGED
@@ -32,6 +32,8 @@
32
32
 
33
33
  {
34
34
 
35
+ var name = srcPathから適当に変換(リソース名となる)
36
+
35
37
  var res = new ResXFileRef(srcPath,
36
38
 
37
39
  typeof(System.Drawing.Bitmap).AssemblyQualifiedName);

1

ご回答くださった方の名前が間違えていたので、訂正

2021/05/10 05:47

投稿

ttact
ttact

スコア170

test CHANGED
@@ -1,4 +1,4 @@
1
- fanaさんの回答からあたりをつけて、以下の記事を見つけました。
1
+ radianさんの回答からあたりをつけて、以下の記事を見つけました。
2
2
 
3
3
  [How to use ResXResourceWriter to create correct Resx file?](https://social.msdn.microsoft.com/Forums/vstudio/en-US/c5c17781-13a9-422f-a1ec-befff6e12575/how-to-use-resxresourcewriter-to-create-correct-resx-file?forum=netfxbcl)
4
4