0 と 1 の世界の見習い探検家

カテゴリ: プログラミング日誌

どうもこんにちは、青砥です。
最近発見して便利だと思ったナレッジを共有します。

アセンブリのバージョンなどでビルド時の日時を使用する方法について書き遺しておきます。


awpioetvj4tj-02
図 1 ビルド結果

Visual Studio のプロジェクトのプロパティで、アセンブリや NuGet Package (*.nupkg) のバージョンを指定するかと思いますが、ここで「ビルド時の日時」を使用した動的なバージョン番号の生成を可能にする方法を見つけました。

まずは結論から。
$([System.DateTime]::Now.ToString('0.yy.M.dHH'))

qad34vtuwm04t
図 2 プロジェクト プロパティでの指定


DateTime オブジェクトを ToString しているイメージです。
yy.M.dHH なので下記のようになります。

図 3 例の書式指定の場合のバージョン番号生成結果


上記は .NET Standard 2.0 ライブラリのプロジェクトのプロパティですが、おそらく Visual Studio 2022 上であれば他の .NET Framework 向けプロジェクトなどでも利用可能かと思います。


仕組み
Visual Studio ではプロジェクト プロパティで利用可能な変数のような仕組みが存在します。

(参考)
MSBuild の予約済みおよび既知のプロパティ - MSBuild | Microsoft Learn
https://learn.microsoft.com/ja-jp/visualstudio/msbuild/msbuild-reserved-and-well-known-properties?view=vs-2022

例えば、プロジェクト プロパティでは出力アセンブリ名がデフォルトではプロジェクトと同名になるよう下記のような指定になっております。

図 4 出力するアセンブリ名の指定


上記の例ではプロジェクトに関する各種値を提供する機能からプロジェクト名を値として利用しています。このような変数機能の他に「プロパティ関数」と呼ばれる動的な値の呼び出しも一部提供されているようです。

(参考)
プロパティ関数 - MSBuild | Microsoft Learn
https://learn.microsoft.com/ja-jp/visualstudio/msbuild/property-functions?view=vs-2022

上記のページで紹介されている例を見てみるとなんとなく分かる通り、どうも PowerShell をワンライナーで実行しているようなイメージのようです。
そのため、結論に記載した通り、System.Date の Now プロパティで現在 (実行はビルド時なのでビルド時現在) の日時情報を DateTime オブジェクトで取得し、ToString メソッドで好きな形式に書式調整してあげれば、日時から動的にバージョン番号を生成することができるようになります。

DateTime の文字列化時の書式設定については下記ページをご参照ください。
(参考)
DateTime.ToString メソッド (System) | Microsoft Learn
https://learn.microsoft.com/ja-jp/dotnet/api/system.datetime.tostring?view=net-7.0

もっとわかりやすい MS 以外が公開しているドキュメントも参考になるかとは思いますがw


開発中途版などで中間成果物を短いスパンでリリースするなどの利用目的にハマると思います。

ご参考までに。

どうもご無沙汰しております、青砥です。
この度初めて NuGet でパッケージを公開してみました。

その名も「MisskeySharp」、、






最近 Twitter の代替 SNS が再び勢い付いており、そのうちの一つが Misskey です。
Misskey は個人により開発されているようですが、そのシュールで豊富なリアクション スタンプの種類、また 1 投稿でかなりの長文が打てるところが特長です。

さて、そんな Misskey でこの度とある bot を公開したいと思い、.NET で開発いたしました。
もともとは Twitter の bot として動かしていたものなのですが、イロマス政権の重大製作の 1 つ「Twitter API 有償化」などの影響を受け、Twitter では運用できなくなってしまったものです。

Misskey は .NET 用のクライアントとして Misq という高機能なライブラリがすでに提供されているようでしたが、ターゲット フレームワークが .NET Framework 4.x で止まっており、.NET 6 のプロジェクトから利用を試みたところ、.NET 5 以降ではどうもうまく動かなくなってしまっているようでした。

そこで、私自身の Misskey API の勉強も兼ね、.NET Standard で新たにライブラリを開発することにいたしました。


現状のバージョンは開発中途版という扱いで、標準機能で利用できるものも主にノートの投稿、検索、フォロワー / フォロイーの一覧取得程度です。
今後、機能をどんどん増やしていきたいと思います。

Misskey の API はとても単純明快で、叩きやすい造りになっているところが面白いなと思いました。
みなさんもいかがでしょうか。

どうも、こんにちは。
あおとです。

PowerShell で Windows 内にインストールされている一番新しいバージョンの .NET Framework の C# のコンパイラを呼び出し、C# のソース ファイルを EXE にコンパイルするコマンドをご紹介します。
2021 年の記事ですが、 .NET Core や .NET 5 ではないです。ごめんなさい。

更新すると言いつつ、この頃全く更新ができていなかったため、久々に更新します。
書くことに意義がある、というスタンスの記事のため、役に立つ内容かどうかは取り敢えず一旦横においておくとして。


結論
$SourceFile="example.cs"
$LatestVersionCSharpCompilerPath=(Get-ChildItem "C:\Windows\Microsoft.NET\Framework\v*\csc.exe" | ForEach-Object { $_.FullName } | Sort-Object)[-1]
Invoke-Expression ($LatestVersionCSharpCompilerPath + " " + $SourceFile)

この 3 行で C# のコンパイラを探してソース ファイルをコンパイルします。


1 行目: $SourceFile="example.cs"
至ってシンプルです。C# のソース ファイルを指定します。フルパスでも良いですし、パラメータで受け取る形にしてあげても OK。

2 行目: $LatestVersionCSharpCompilerPath= ~ (略)
C# のコンパイラ "csc.exe" を検索します。
検索と言っても場所は大体決まっているため、条件に合う csc.exe を列挙したのち、パスをソートし一番最新のモノを引っ張り出しています。

3 行目: Invoke-Expression ~ (略)
コンパイラを実行します。
csc.exe には他のアセンブリ (DLL) の参照や、出力されるアセンブリのタイプを指定するオプションが存在しますが、
例えばプロンプト画面 (黒窓) を使用しない Windows Forms などのアプリをコンパイルする場合は、下記のような形で指定ができます。

Invoke-Expression ($LatestVersionCSharpCompilerPath + " -t:winexe " + $SourceFile)

csc.exe のオプションに関しては、下記記事を参照されたし。
カテゴリ別の C# コンパイラ オプションの一覧 | Microsoft Docs https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/compiler-options/listed-by-category

以上。

イメージ 1


今度こそ最後の投稿です。
Yahoo! ブログのページ ソースをまるっと取得するツールのバイナリ リリースを公開しました。

Simple Downloader for Yahoo! ブログ - ソフトウェア | 0と1の世界の見習い探検家
http://www.a32kita.net/software/ybsimpledl/

急ごしらえのため、現在はページのソースデータを取得する範囲に留まっておりますが、
今後ソースデータから Yahoo! ブログ公式の移行ツールの対象とならないコメントなどのデータを個人で保存するために抜き取るツールなども鋭意開発中です。

本ツールは、 Yahoo! ブログ公式の移行ツールを使用していない移行前のブログを対象としております。
また、パブリックに公開されている記事のみが対象となります。

今までありがとうございました。
ご訪問いただいた皆様、当ブログとこれまで友だち関係で居てくださった皆様に大変感謝を申し上げす。
また、このような素晴らしいブログ サービスを提供してくださりました Yahoo! JAPAN 様に、改めて感謝申し上げます。

今後ともよろしくお願いいたします。


ブログ移転のお知らせ

いつもご訪問頂きありがとうございます。
Yahoo! ブログのサービス終了に伴い、ブログを移転いたします。
移転先: http://blog.a32kita.net/
詳細は、こちらの記事をご覧ください。

ブログ移転のお知らせ

いつもご訪問頂きありがとうございます。
Yahoo! ブログのサービス終了に伴い、ブログを移転いたします。
移転先: http://blog.a32kita.net/
詳細は、こちらの記事をご覧ください。

Yahoo! ブログでは最後の更新となります。

イメージ 1

先月下旬、 Yahoo! ブログ公式の移行ツールではサポートされないトラックバックやコメントなどのデータを「個人用に取得する」ツールを開発していると紹介いたしましたが、
ごめんなさい。
間に合いませんでした。

言い訳としてはお盆の間も思いの外忙しかったや、 d! アニメで古いアニメ漁ってたらうっかりハマってしまった等々いろいろございますが、納期を守れないのはエンジニアとしてまだまだ未熟という証ですね ((

とはいえ、何も無いわけではないんです。
先程 master にマージしていまこんな状態、、

a32kita/YBlogLoader
https://github.com/a32kita/YBlogLoader

以下の機能の実装はできました
・ブログの基本データ (タイトル、開設日、著者名) を取得する機能
・「すべての記事」をクロールして、投稿記事の ID を片っ端から取得する機能
・投稿記事の ID から投稿先書庫などを取得する機能

…すべてスクレイピングの力技です。
ということでビルド済みバイナリでの公開は許してください (

以上の実装できた機能をもとに、とりあえず全ての記事のソースを取得するだけの「Simple Downloader」なるツールは一応動く状態にしておきました。
最新の記事から順番に HTML ソースを片っ端から PC に DL するだけのツールです。

イメージ 2

こんな感じで書庫別に HTML ファイルが落ちてきます。

Windows 向けで Visual Studio などの C# のビルド環境をお持ちの方は、どうぞお好きにビルドしてみてください。
完全にサービスが終了する 12 月まで少しずつアップデートを続けます。


投稿機能が無効化される前にこれだけ置いていきますね。
というわけで皆様お元気で。

では。

このページのトップヘ