【C#】【EntityFramework】「列 ‘InvariantName’ は一意であるように制約されています。」エラーが発生する

エラー内容

System.Configuration.ConfigurationErrorsException: system.data のための構成セクション ハンドラーを作成中にエラーが発生しました。: 列 ‘InvariantName’ は一意であるように制約されています。値 ‘System.Data.SQLite.EF6’ は既に存在します。 (C:\xxxxxxxx\xxxxxxxxxx.exe.Config line 11) —> System.Data.ConstraintException: 列 ‘InvariantName’ は一意であるように制約されています。値 ‘System.Data.SQLite.EF6’ は既に存在します。

原因

App.configの<system.data>にinvariant=”System.Data.SQLite.EF6″が複数記載されている場合に発生

【C#】DataRowの各項目をまとめてConsole出力する

foreach (DataRow dataRow in dataTable.Rows)
{
Console.WriteLine(
string.Join(",",
Array.ConvertAll(dataRow.ItemArray, x => x.ToString()))
);
}
  1. DataRowのItemArrayがobject[]型で返ってくるためArray.ConvertAll()でstring[]型に変換する。
  2. string.Join()で、string[]型の値を「,」区切りで文字列結合する

【C#】【Selenium】session not created~エラーが発生する

エラーメッセージ

System.InvalidOperationException: ‘session not created: This version of ChromeDriver only supports Chrome version 85 (SessionNotCreated)’

「new ChromeDriver()」を実行すると発生した

対処方法

NuGetで、Selenium.WebDriver.ChromeDriverを最新版(インストールされているChromeと同じバージョン)に上げる。

上げた後、ソリューションのクリーンを実行した後に、ビルドすればOK

【Androidアプリ】電光ニュース(LED News)


Ver 1.0.5(2021/02/23公開)

YahooやNHKの最新ニュースを電光掲示板風に表示します。
机の横においてぼーっと眺めるのに最適です。
ダブルタップすれば、そのニュースがお使いのブラウザで表示されます。

タップすると設定画面が表示され、表示速度と文字色を変更できます。

 

GooglePlayからダウンロードできます(210円)

更新履歴(GooglePlayへの反映は数日遅れます)

  • Ver 1.0.5  2021/02/23
    設定画面を追加しました。タップすると速度と文字色を変更できます。
  • Ver 1.0.4  2021/02/05
    タップして変えた色を、次回起動時に復元する機能を追加しました。
  • Ver 1.0.3  2021/01/28
    タップするとオレンジ色、緑色に順番に変わる機能を追加しました。
  • Ver 1.0.2  2021/01/28
    アメリカ対応(The New York TimesのU.S.版を表示)
    イギリス対応(BBCを表示)
    中国(簡体字)対応(人民网を表示)
    ※Androidの地域と言語の設定にて自動で切り換えます。
  • Ver 1.0.1  2021/01/27
    英語対応(英語版のアプリタイトルはLED News)
    英語の場合は、The New York TimesのWorld版を表示します。
  • Ver 1.0.0  2021/01/18
    ダブルタップすると、ニュース内容がブラウザで表示される機能を追加しました。
    普段お使いのブラウザで表示されます。
  • Ver 0.0.1  2021/01/11
    新規公開を開始しました。

 

【Web】OpenBugBountyからメールが来たときの対応

「juraku-software.net Security Vulnerability Notification | OBB-1717685 | Important」という件名のメールが突然届きました。(このページを記載している時点で問題は解消済みです)

メール本文はこんな感じです。

どうもセキュリティの問題があったらしく、それを知らせてくれたとのこと。
詳細を知るには、担当者にメールする必要があります。
送られてきたメールのレポートURLをクリックすると「Discovered and Reported by:」という項目のリンクをクリックすると担当者のメールアドレスが分かるので、英語で質問する(レポートURLと、Please bug descriptionみたいな英語だけ書けば大丈夫でした)。

対応しないまま放置すると、問題内容が公開されてしまうようなので早めに対応した方がよさそうです。

対応完了後、寄付を求められたのでせっかく調べてくれたので寄付しました(今回の問題はphpinfo.phpを残したままだったと何ともお粗末な内容でした・・・)

ちゃんと対応すればセキュリティの問題も解消され、外国の方ともメールできるいい機会なのでこのメールが来たら対応した方がよいでしょう。メールの返信も30分以内には返ってきました。

【C#】列挙体で複数の値を選択する

動作確認

Visual Studio 2017 C#

列挙体の定義

[Flags]
private enum EnumSample
{
    //項目が混じらないように、それぞれ立てるビットの位置を変える
    a = 0b0001,     //「0b」から始めると2進数で書ける
    b = 0b0010,
    c = 0b0100,
    d = 0b1000
}

使い方

//aとcを選択する
var sample = EnumSample.a | EnumSample.c;

//選択されているかはHasFlagを利用して確認する
if (sample.HasFlag(EnumSample.a))
{
    //こっちに来る
    Console.WriteLine("aは存在");
}
else
{
    //こっちには来ない
    Console.WriteLine("aは未存在");
}

//どの項目が選択されているかを確認したい場合は、列挙体の全項目を回してチェックできる
foreach (EnumSample enumValue in Enum.GetValues(typeof(EnumSample)))
{
    Console.WriteLine($"{enumValue} = " + sample.HasFlag(enumValue));
    /*
     * 実行結果
     * a = True
     * b = False
     * c = True
     * d = False
     */
}

【C#】コンソール出力の文字色を変更する

C#のコンソールアプリにて、表示する文字色を変更するにはForegroundColorを変更する。

Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("*****黄*****");

Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("*****緑*****");

Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("*****赤*****");

Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("****元の色****");

元の色はGray。 多用すると逆に見にくいので、エラー発生時などの出力の際には黄色を使うとよいかも。

【Visual Studio2017】コマンドラインからビルドすると「80131577」エラーが発生する

現象

devenv.exeをコマンドラインから実行し、ソースをビルドすると、
ERROR: An error occurred while validating. HRESULT = ‘80131577’
が発生してビルドに失敗する。

環境

Visual Studio 2017 Community

対処方法

必要なNuGetパッケージが存在していないのが原因。Visual Studioを起動し、NuGet パッケージの復元を行えばOK

【Android】開発環境をEclipseからAndroid Studioに移行したときにハマった内容メモ

2011年に作成したアプリを、2020年の今になってバージョンアップすることにしました。以前はEcliseで開発していたので、Android Studioに移行した際にハマった点をメモします(もう皆さんとっくに移行済みだと思うので、自分の備忘として記載)

Android Studio

日本語化しない方がいいです。問題が発生したとき、英語のエラーメッセージでそのまま検索し、翻訳した方がゴールへ近いです。

起動してから2~3分は何もしないで放置しておいた方がよいです。起動してすぐにデバッグしようとしたら謎のエラーが出て困ったのですが、しばらく放置していたら自然と消えました。
ちょっと面倒ですが、Eclipseより断然安定してデバッグできます。

プロジェクトの移行

Android Studioの移行機能は使わない方がよいです。謎のエラーにハマります。新規プロジェクトでActivityなしを選択し、作成されたプロジェクトに既存のJavaソースを入れた方がよいです。
Javaソースはそのまま使えました。
※ソースのフォルダパス中に日本語が含まれるとエラーになります。

ActivityやRなどの仕組みもそのままでした。懐かしい。。。

AndroidManifest.xmlも引き続き存在していますが、ただ、Sdkのバージョン等の指定はこのファイルではなく、build.gradleというファイル内で行うように変わっています。
2020/10/11現在、minSdkVersionは14(Android 4.0)以上しか指定できません。
SDKのバージョンはこちらのWikiを参考にしました。

DatePicker

日付選択に利用していたDatePickerのデザインが大きく変わっていました。年月日をそれぞれ指定するコントロールだったのですが、カレンダー形式になっています。

次の2つのプロパティを指定することで、これまでと同じデザインに戻せました。

android:calendarViewShown="false"
android:datePickerMode="spinner"

Activityの背景色

黒色がデフォルトだったのですが、白色に変わっていました。
元の色に戻れば良いので、「setBackgroundColor(Color.BLACK)」にて色を変更しました。

ネットからデータのダウンロードはメインスレッドでは不可

実行時エラーになってしまうようになりました。
このサイトを参考に非同期に変更しました。

GPSの取得

これは未だに良くわかっていませんが、以下のように指定したところ、以前作成したよりもGPSの受信頻度が格段に上がりました(2種類指定する)。これで様子を見ようかと思います。

mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 1, this);
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 500, 1, this);

パーミッションのリクエスト

以前はAndroidMarketからダウンロードする際に、必要な権限の承諾が求められたはずですが、これがアプリ起動時の承諾に変わっています。

そのため、いきなりActivityを表示するとエラーになってしまいます。
権限を承諾してくれない場合も考慮する必要があります(といっても、承諾してくれなければアプリが使えないので、「許可してください」といったメッセージを表示するくらいしかできないのですが・・・)

こちらのサイトを参考に、承諾画面の表示と、承諾された場合のイベントを実装することで対処できました。

アプリのアイコン

以前はサイズ違いのファイルを用意して、それぞれのフォルダに配置していって面倒だった記憶がありますが、今はとても楽になりました。

こちらのサイトを参照ください。

終わりに

ずっとバージョンアップできずにいたのですが、一度やり始めてしまえば何とかなりました。日本語のサイトが少なくなっている気がしますので、眠っているソースがあれば早めに以降した方がよさそうです。

【Windowsアプリ】閉じるボタン隠すくん


Ver 1.0.1(2020/10/05公開)

閉じるボタンの上に四角い枠を表示することによって、閉じるボタンを誤って押してしまうことを防ぎます。

Windows 10対応
フリーソフト100さんに紹介して頂きました

ダウンロード

ダウンロード(82KB)
※ダウンロード後、Zipファイルを解凍する前に、ファイルを右クリック→全般タブの一番下のセキュリティの「許可する」にチェックを入れて、「OK」ボタンをクリックした後に、解凍してください。

Vectorでも公開しています

開発環境:Visual Stuido 2017(C#)