おなじみの。
1. “R”
Android の「R」や Apple devices の「R.swift」の Windows 版と思っていただければわかりやすいかと。
テストしているのはテキストだけなので、リソースにほかのものが混入しているとどういう動作が起こるかは不明です。
NuGet パッケージで入れたらうまく扱ってくれるはず(よほど変なことしていない限り)。
2. オプション
たぶん動くと思います。NuGet パッケージで使う場合は、msbuild の設定 (csproj, vcxproj) に設定を追加すれば行けると思います。
I will create the document of english version as soon as possible. Sorry, guys.
コマンド | msbuild プロパティー | 説明 |
---|---|---|
-i, --input | なし | 入力リソースをフルパスで指定します。相対パスはちゃんと定義されていたら動くと思います。 |
-e, --exclude | MntoneResourceExcludeResourceNames |
生成を除外したいリソースのファイル名を指定します。例えば Resources.lang-ja-JP.resw であれば Resources です。カンマで複数指定できます。 |
-o, --output | MntoneResourceGeneratedFilesDir |
出力先を指定します。出力先を変えると、自動的に参照されているパスが狂うため非推奨です。 |
-f, --filename | MntoneResourceGenerateFileName |
出力ファイル名(コマンドで拡張子なしとありますが、拡張子を含めての指定です)。C# では Resources.g.cs 、C++ では res.g.h がデフォルトです。 |
-n, --namespace | MntoneResourceGenerateRootNamespace |
ルート名前空間です。 |
--impl-namespace | MntoneResourceGenerateImplNamespace |
ルート名前空間に対してネストする実装名前空間です。C# では __Impl 、C++ では __impl がデフォルトです。 |
-d, --default | MntoneResourceGenerateDefaultResources |
ルート名前空間に展開するデフォルトのリソース名を指定します。デフォルトは Resources です。指定方法は exclude と同じです。 |
-indent | MntoneResourceGenerateIndent |
インデント指定です。Tab, Space1, ... と指定できるように実装していますが、現在非対応です。 |
-l, --language | (DefaultResourceLanguage ) |
デフォルトリソース言語指定です。これをもとに自動生成のソースコードにコメントを追加します。 |
--linebreak | MntoneResourceGenerateLineBreak |
改行コードの指定です。LF, CR, CRLF が指定できます。 |
--mode | [0.0.2a以降] MntoneResourceGenerateMode |
自動生成コードのモード指定です。現在は 1 (Simple) と 2 (Advanced) に対応しています。将来のために数字は予約されており、デフォルトでは int の最大値が指定されており、自動的に最新版に更新されます。生成コードが気に食わない場合は、--mode 1 を指定してお使いください。 |
--public | [0.0.2a以降] MntoneResourcePublic |
自動生成コードのアクセスレベルを指定します。デフォルトで false (internal) です。 |
3. 最後に
msbuild の理解が深まって、こういうツールをビルドパイプラインに組み込めるのが判明したので、C++ 版を作るついでに C# も作りました。検証は碌にしていない上に、テストコードもないので、動作に関しては期待しないでくださいの Ver. 0.0.1-alpha
。
とりあえず、古いたたき上げコードが微妙に残っていたりするんで、気が向いたらそれ直すかも。
ただ、ポジティブ☆デスクトップやAngel Umbrellaの開発を再開したいので、あまり触る時間はないかもです。
C++ 版のコードは、実質これがバージョン 3 の実装なので、かなり洗練されています。もともとのバージョン 2 はポジティブ☆デスクトップに使われていて、これをコンセプトに作っています(参考にしただけなので結果的に出力されるコードはかなり違います)。
C# 版のコードはまだ最適化が不十分だと思われるので、PR の方で投げてくれれば対応します。C# 版はぶっちゃけ自分のやる気がない(C++/WinRT で使うのがメイン)ので、マジで C#er の方が手直ししていただけると助かります🙏🏻
2023/1/22 追記
C# 向けに Autogen V3 を作りました。V2 のほうがいくらか効率的な機械語を吐き出す模様。
現状
により、new せず構造体をキャッシュすることで V2 と同じコードが生成されるんじゃないのか、って考えている。C# の最適化コードに関しては研究中。。。