Category Archives: Visual Studio 2017

IEサポート終了なので。

MSのInternet Explorerのサポートは、2022/06/15で終了。スクレイピングできないサイトのオートパイロットはSHDocVw.dll内のAPIで使用していますが、どうやらDLLはなくならないっぽい。けれど確認は各自してくださいとの事らしい。

Internet explorer end of life: impacts on programs using SHDocVw.DLL – Microsoft Q&A

なので、C#で使えそうなAPIを模索中。WebAPIを公開していてもIPでブロックされて使えないサイト(某Yフ―ショッピング)もあるので結局、オートパイロットでUI上からダウンロードリンクのクリックを再現している。ダウンロードダイアログのダウンロードボタンは、別プログラムでクリックしている。

        
    SHDocVw.InternetExplorer objIE = new SHDocVw.InternetExplorer();
            objIE.Navigate("https://xxxx.com/URLPath");
            objIE.Visible = true;
            objIE.Silent = true;
            objIE.FileDownload += 
         new DWebBrowserEvents2_FileDownloadEventHandler(IE2_FileDownload);

    foreach (HTMLButtonElement b in objIE.Document.getElementsByTagName("button"))
        {

            if (b.name == "btnSubmit")
            {
                //Console.WriteLine(b.type);
                //Console.WriteLine(b.name);
                b.click();
                break;
            }

        }

代用できるAPIがみつかればIEはすぐに捨てていくことにする。できればブラウザのUIを表示しないでスクレイピングのみでやりたいけれど、WebAPIを公開しているのにもかかわらず登録IPのみ処理可能っていうのは、やめてほしい。登録してもPHPを走らせていているサーバはレンタルサーバーのせいか結局はじかれる。よくわからないがサポートと話すくらいならできる方法でやるしかない。
愚痴ってもしょうがない。

OneDriveでのTXTファイルの扱いが不自然な件。

最近、OneDriveの同期フォルダにローカルのgitリポジトリフォルダを置いてソースをMacとWinで共有している。今は一人でソースをアップデードしているのでこれで十分たりている。Winからコードをアップデートし、コミットすると同時にOneDriveの常駐アプリが即座にファイルをアップロードし、Macのソースコードもアップデートされる。

WinではUWPのコードを中心にアップデート、PCLの共通ライブラリはどちらからも必要な時にアップデートする。

Android のコードはWin、Macどちらでもエミュレータが使えるので慣れた環境が良いのだけれど、今後のモバイル環境、マシン依存を考えて、MBPでアップデートすることにする。

iPhoneのコードはWinでも更新可能だけれど、Win上でデバッグするとMac上でAppleのシュミレータが起動されてMac上でオペレーションをする事になるので、こちらもMBPに以降する。WinのUWPアプリは圧倒的にダウンロードするが少ないのでiPhone, Android, UWPの優先順位で行く。

そして本題ですが、

OneDriveを使っていて、Win10上でノートパッドを使って.txtファイルをOneDriveの同期フォルダに作成した。そして、iPhone、iPadで同じファイルを更新したかった。

しかし、iOS版のOneDriveで、TXTファイルの開いて内容を見ることはできるのだが、テキストの入力ができない。外部コマンドを見るも、txtファイルをそのアプリに添付するか、ファイルをダウンロードしてローカルに保存しようとする。Appleのメモ帳アプリでもTXTファイルを添付ファイルにされてしまう。

つまり、iOSからは直接OneDriveのファイルは更新できなくなっている。アプリそれぞれのデータファイルとしてしか保存できず。そのアップデートしたテキストもOneDriveに戻すこともできず。

PDFファイルで保存すれば、MSWORDかその他のPDFエディタを開けるけれど、TXTでは対応していない。

その線で次のアプリを考えて見るか。

Xamarin – System.Xml.XMLDocument がPCLプロジェクトで使えない!

Xamarinでクロスプラットフォームのコードを書いていてハマった点。

少々込み入った話ではあるけれど、Xamarinでクロスプラットフォームプロジェクトを使っていてメインで共有されるコードに使えないnamespaceが結構あります。

今回はまった点としては、

・project.ios、project.UWP、project.Androidのそれぞれの参照には、System.Http.Netが定義できるが、肝心なメインのprojectの参照には追加できない。

ターゲットの定義上で、.NET Standardが定義されているのが理由のように見える。

 

ターゲットの定義に問題がありそうだけれど、各プラットフォームのプロジェクトで参照できるのに、肝心な部分でHttpClientが使えないのはちょっと痛い。

アプリの提出を優先して、各プラットフォームに書いてしまうことはできるけれど。どうしたもんかな。

追記:いろいろなサイトを検索して調べていますが、Mac版Xamarin Studioとかで設定が可能らしい。この辺をきっちり公開してる人っているのかな。。。参考リンク

追記2(解決):XMLDocumentはPCLではサポートされていないようです。参考リンク 理由はWindows Phone 8でXMLDocumentがサポートされていないからのようです。ターゲットからWindows Phone 8を外せればよいのでしょうが、PCLではデフォルトWindows 8.1とPhoneが入れられるようです。(プロファイルのリストがMac版Xamarin Studioで設定できます)

個人的にはテスト用にWindows Mobile 10を持っているけれど、一番シェアの少ない(ほとんどユーザーのいない)Windows Phoneのせいで・・・

解決策としては、System.Xml.Linq.XDocumentを使えということですね。\o_o;/

追記3:プログラムをXDocumentベースで書き換えました。結局XMLDocumentよりも素直な書き方になった感じ。まぁプログラムも2回目書き直すときは最初よりも簡単にかけるもの。仮にNativeコードベースでクロスプラットフォームのプロジェクトを作る場合は、Xamarinのクラスライブラリプロジェクトを作って、参照(Refference)で呼ぶ必要がある。DLLにして一つのモジュールとしてコンパイルする。Shared Projectは、参照設定とNuGetのパッケージは使えないので。

 

UWPサンプルソリューションはNTFSドライブにないとデバッグできない件

最近UWPでプロジェクトを進めていますが、サンプルをダウンロードしてWindows10上で実行することがあります。その時にソリューションを保存したドライブがNTFSじゃないと以下のエラーで止まります。

以下のメッセージはXamarinで公開されているサンプルコード(WorkingWithListview.UWP)で出たエラー。

1>—— 配置開始: プロジェクト:WorkingWithListview.UWP, 構成: Debug x86 ——
1>新しいクリーンなレイアウトを作成しています…
1>レイアウトにファイル (合計 18 MB) をコピーしています…
1>必要なフレームワークがインストールされているかどうかを確認しています…
1>アプリケーションをレイアウトから実行するように登録しています…
1>DEP0700: アプリケーションの登録に失敗しました。[0x80073CFD] Windows cannot deploy to path Debug of file system type exFAT.
========== 配置: 0 正常終了、1 失敗、0 スキップ ==========

今回はMac/Win両方で使う為のUSBドライブ(exFAT)だったので、デスクトップマシン内にあるハードディスク(D: 1TB)にソリューションをフォルダごとコピーして実行できるようになりましたが、CドライブがSSDで256GBでDドライブがexFATというケースはあると思います。

参考までに

やっぱりアップデートに時間が取られる

少々愚痴っぽいことを書いてみる。

個人的な事情で約3週間自宅を離れてマシンを起動しない状況でした。帰ってきて、マシンを起動して、設定を変えたか何かの理由でマシンを再起動が必要になり、スタートメニューの再起動欄にアップデートして再起動の選択肢しかない。

仕方なく、アップデートして再起動する。そしてアップデートが始まりそのまま、5分くらいアップデートがはじまる。さらにマシンが起動後、アップデートが10分くらい続く。

今のメインマインがBIOSブートということもあり、OSのディスクからの読み込みに時間がかかる。C:ドライブがSSDなのに、起動が遅い。早くUEFIに乗り換えたいが今はそんな暇はない。とにかくWindowsストアアプリをリリースして、確認することが山ほどある。

クロスプラットフォームでC#がどのくらい使えるのか、そしてダウンロード数はどのくらいなのか。

そして、VisualStudioの起動も試してみたけれど、案の定こちらもアップデートあり。インストーラーを起動してアップデートを起動するがこちらもダウンロードが遅い。OSのアップデートと、開発環境のアップデートでまた1日取られてしまう。

VisualStudioのアップデートがされてしまうと、ターゲットのOSバージョンまで新しい環境が要求される訳で、開発側とユーザー側の両方でアップデートをしないといけない。

アンドロイドでは、アプリのアップデートのためにOSすべてのアップデートを要求されるというのを聞いたことがあるけれど、Windowsもそのうちそういう状況になるのだろうか。

なにもしていないのに、時間だけが過ぎていく・・・