投稿

6月, 2020の投稿を表示しています

.net Core 3.1 は まだ早かったのかな… その3

【.net Core 3.1 の NLogではまった… そのX】 で、「単一ファイルの作成」 で作ったEXEファイルを作りました! が…いつの間にか「単一ファイルの作成」で「発行」を行うと、正常に作成されない(エラーが発生するようになってしまいました) なぜ…? エラー内容: 「Invalid input specification: Found multiple entries with the same BundleRelativePath」 検索した結果下記URLがヒットしました。 https://github.com/microsoft/vcrt-forwarders/issues/8 で、内容の最初に、「下記URLに移動せよ」と記載があるので移動します。 https://github.com/dotnet/runtime/issues/3735 で、このURL内に答えがありました。【NLog.Config の場合限定ですが!】 <PackageReference Include="NLog.Config" Version="4.6.8"> <ExcludeAssets>all</ExcludeAssets> </PackageReference> 分かる限りでは【.nuget で取得したDLL参照を1つのEXEにまとめる場合、DLL参照が重複してしまうらしく、作成できない】との事でした。 なので、「ExcludeAssets」タグを追加することで対象外?に設定するようです。 NLog を使ってさらにNLog.Config も参照追加すると発生するようです。 てなわけで、単一EXEにする場合に上記エラーメッセージが出た場合は、「ExcludeAssets」タグを追加してみることをお勧めします。 ただ、どれに付けて良いのかわからないので、DLL参照追加したら、毎回「発行」をして確認する事をお勧めします… 検索用:.net Core 3.1 単一ファイルの作成 エラー

.net Core 3.1 は まだ早かったのかな… その2

.net Core 3.1 WPF に DataGrid の NumericUpdown が無い! 世の中よく使われてるライブラリは.net Framework 用だった… 警告出るから使いたくないんだよねぇ~ 5.0まで待てばよかった… しかし、毎回思うがこれって必要なのかね…? 直接入力した方が楽だとは思うのだが… たまに上下キーやマウスホイールで増減させるときがあるから、あった方が良いのか… 検索キー:.net Core 3.1 DataGrid NumericUpdown

.net Core 3.1 は まだ早かったのかな…

.net Core 3.1 でシステムを作っているけど、かゆい所に手が届かないというかなんというか… 今回はDataGrid のお話 リソースデータから項目名を表示するのにやり方が2種類あります。 1.{DynamicResource XXXXXXXXXX} 2.{StaticResource XXXXXXXXXX} 1.のDynamicResource はリソースファイル内の値を変更したら画面に反映されます。 また、Windowのタイトルを表示する場合は、Dynamicじゃないとエラーが出ます。 (Title="{StaticResource XXXXXXXXXX}" にするとビルドエラーで実行できません) ついでに起動時ちょっと早いらしい(必要な時にresource参照するから) 2.のStaticResource は リソースファイル内の値を変更しても画面に反映されません。 また、DataGridTextColumnタグのHeader (グリッドのヘッダタイトル) は static じゃないと表示されません。 ついでに起動時ちょっと遅いらしい(起動時にresource参照するから) というわけで、全部統一させろよ! 一部はDynamic、一部はStatic って、処理共通化できないし、 改修や引き継いだ後の不具合の元だ! メンテナンスがやりづら過ぎて話にならない… ドキュメントファーストの日本企業(うちの会社だけ?)には合わないよなぁ… アジャイルやコードファーストやってたのになぁ… サンプルコード: Windowのタイトル mc:Ignorable="d" Title="{DynamicResource XXXX}" Height="600" resource宣言: <Window.Resources> <ResourceDictionary Source="/Properties/MainWindow.xaml"/> </Window.Resources> DataGridのヘッダタイトル表示 <DataGrid.Columns>...

.net Core 3.1 の NLogではまった… その3

その1:https://deathmarchdaily.blogspot.com/2020/06/net-core-31-nlog.html その2:https://deathmarchdaily.blogspot.com/2020/06/net-core-31-nlog-2.html その3:https://deathmarchdaily.blogspot.com/2020/06/net-core-31-nlog-3.html 【.net Core 3.1 の NLogではまった… その2】 で、「単一ファイルの作成」 で作ったEXEファイルを実行すると、ログファイルの出力先指定が変わってしまう問題を解決しました。 上記その2と同じように、NLog.config ファイルはどのファイルを参照するのでしょうか…? 答えは、TmpフォルダにあるNLog.config を参照します。 そのため、不具合が発生した際、エンドユーザ「ログをDebugにして再現させて、そのログ下さい」が簡単には言えません。 下記URL記事にもありますが、パスが面倒です。 場所:C:\Users\{ユーザ名}\AppData\Local\Temp\.net\TestProject\{ランダムな文字列}\NLog.config https://rksoftware.hatenablog.com/entry/2019/09/29/155926 というわけで、アプリケーション起動時にNLog.config ファイルの読み込み先変更処理を追加しておきます。 WPFのMVVMはまだ苦手です… ファイル:App.xaml.cs (App.xaml) のサンプル【実際にPrismで行っている処理は下記します】 private void Application_Startup(object sender, StartupEventArgs e) { if (File.Exists("./nlog.config")) { // ログファイルが存在する場合は指定する LogManager.Configuration = new XmlLoggingConfiguration("./nlog.config...

.net Core 3.1 の NLogではまった… その2

その1:https://deathmarchdaily.blogspot.com/2020/06/net-core-31-nlog.html その2:https://deathmarchdaily.blogspot.com/2020/06/net-core-31-nlog-2.html その3:https://deathmarchdaily.blogspot.com/2020/06/net-core-31-nlog-3.html NLog の サンプルConfig を見ると、大体が ${basedir} を使ってますよね? 私もそれに習って ${basedir} を使ってファイル出力先を指定してました。 さて何が問題なのでしょうか? 答え:EXEをリリースするときに使う「発行」がありますが、この設定で「単一ファイルの作成」 にチェックを付けてEXEを作ると、多量のDLLがなくなり1つのEXEになって便利ですよね。 「さて実行だ! → ログファイルが出ねぇ!」のコンボが発生します。 原因はこれ: https://rksoftware.hatenablog.com/entry/2019/09/29/155926 どうも「単一ファイルの作成」を作って実行すると、Tmpフォルダに全DLL群を展開後に実行するようです。 (最初の1回目に時間がかかるのは展開処理を行ってるからなんですね…) で、何が問題かというと、 ・${basedir} は Tmp フォルダを指します。 ・${currentdir} は Exe フォルダを指します。 結果、${basedir} を使用するとログファイルがTmpフォルダに作成されるため、見つけられなくなります。 というわけで、「単一ファイルの作成」 でEXEを作成する場合、パスは${currentdir} を使う または、「./」を使って相対パスを使う のどちらかです。 覚えておきましょう ちなみに「その3」も書きます… パスが変わるという事は…勘のいいひとなら想像できると思います。 検索用:.net Core 3.1 発行 単一ファイルの作成 ログ 出ない ファイルが無い ファイルが作られない 出力されない NLog

.net Core 3.1 の NLogではまった… その1

その1:https://deathmarchdaily.blogspot.com/2020/06/net-core-31-nlog.html その2:https://deathmarchdaily.blogspot.com/2020/06/net-core-31-nlog-2.html その3:https://deathmarchdaily.blogspot.com/2020/06/net-core-31-nlog-3.html .netCore3.1 を使って初のアプリケーションを作成しているが、いきなりはまった… NLog でログ出力するが、ファイルに出力されるが、VS出力ウィンドウに表示されない… とりあえず結論! 下記の様に「xsi:type="Debugger"」を使うべし! <target xsi:type="Debugger" name="LogConsole" layout="${longdate} [${uppercase:${level:padding=-5}}] ${message} ${exception:format=Message, Type, ToString:separator=\r\n}" /> これに気づくまで半日以上かかったよ…orz ASP.net の記述はいっぱいあるし、過去の記述はいっぱいあったが、全部不発…何が悪かったのか… 【てか、.net Core と ASP.net Core は違うんだからどう検索して良いかわからんわ!】「-ASP」って入れればええんか… config の設定系は ここを見て試していくしかないかね…(ターゲット、レイアウト、レイアウト用バインド変数があるから試すしかない!) https://nlog-project.org/config/ 以下手順: 1.各パッケージをインストール ・NLog (v4.7.2) ・NLog.Config (v4.7.2) (ちなみに:「NLog.Extensions.Logging」と「Microsoft.Extensions.Logging.Console」を使えっていうところもあるけど、使わなくてもできた…正しい設定方法が全く...