スキップしてメイン コンテンツに移動

投稿

ラベル(Development / 開発)が付いた投稿を表示しています

【VS2019】ある日急にデザイナーがエラーを吐いた時の対処メモ

仕事でVisual Studio 2019 Communityを使う時があるのですが、ある時、前日まで普通に使えていたプロジェクトのうち、フォームのデザイナがエラーを起こしてしまいました。 --- データが失われる可能性を防ぐため、デザイナーの読み込み前に以下のエラーを解決する必要があります。 このファイルのデザイナーに、デザインできるクラスがないため、デザイナーを表示できませんでした。 --- こんなメッセージが。 結論から言うと直ったのですが、この現象への対処法を調べましたのでまとめます。

【iText】GetOverContentってのもある

実は数年気づきませんでした。 ココに限らずiTextSharpのウォーターマーク関連というと、 GetUnderContent(pageNum As Integer) As iTextSharp.text.pdf.PdfContentByte ってのがよくサンプルとして出てきますが、 GetOverContent(pageNum As Integer) As iTextSharp.text.pdf.PdfContentByte ってのもあるんですね。

My.Computer.Network.DownloadFileは.htaccessリダイレクトに対応していない件

いや、本当は対応できる方法があるのかもしれませんが・・・。 .NETで書くコードのうち、サーバからファイルをダウンロードするには My.Computer.Network.DownloadFile System.Net.WebClient(インスタンスからDownloadFileあるいはDownloadFileAsyncメソッド) の2つのうち、どちらかを使うことが多いと思います。 My.Computer.Network.DownloadFileはインスタンスを作る必要もなく、ダウンロードの進捗ウィンドウを出すことが出来ます。 「あと○分」みたいな画面を自作するよりずっと簡単なので、つい使ってしまうんですよね。 私も業務で開発したプログラムの中に、このメソッドを仕込んでおりました。 一般的なプログラムにもある「今すぐ更新プログラムをダウンロードしてインストール」みたいな機能ですね。 さて、My.Computer~でダウンロードしているファイルの、ダウンロード元サーバを変更するという案件が発生しました。 とりあえずwebサーバ側のリダイレクトで対応しちゃえーということで.htaccessを書いてアップロード。 ブラウザからリダイレクトが効いているのを確認して、プログラムでもダウンロード・・・を試したのですが、落ちてきたのは1KB程度のファイル。戻り値は「正常終了」(というか正常じゃない場合Exceptionが発生する)。 あれーと思って見てみると、この1KBのファイルっていうのがhtml。 中を見ると「Moved Permanently」というタイトルがあり、「こっちのurlに変わったよ!」という内容が記載されていました。 ちなみに.htaccessの中身は↓こんな感じ。 RewriteEngine on RewriteBase / RewriteCond %{SERVER_PORT} 80 RewriteRule ^xxx.dat http://~/xxx.dat [R=301,L] ReweiteRuleがダメなのかなあ・・と思って Redirect xxx.dat http://~/xxx.dat と書いても現象は変わらず。 My.Computer.Network.DownloadFi...

iTextSharpでpdfの合成

合成・・・というと、ちょっと表現がおかしいのかもしれません。 例えば 共通のヘッダとするpdf コンテンツpdf があり、これらをくっつけたい。 イメージとすると ヘッダpdf コンテンツpdf(複数ページ) の、赤の部分にデータがあり、これを合成。 ただし、どちらかをウォーターマーク(透かし)で入れるのは避けたい、という要件です。

iTextSharpでウォーターマーク出力する時の注意

いやー、超ハマりました。 iTextSharpを使って既存のpdfにテキストと画像をウォーターマークとして付与し、出力するという処理を作っていたのですが、一部のpdfで指定した座標に出力できないといった事象が多発していました。 しばらくの間原因がつかめず半ば放置していたのですが、原因判明。 pdfを作成した環境なのか作り方なのかはわからないのですが、用紙サイズが狂っていました。 PdfReaderのインスタンスからGetPageSize(ページ番号)をするとiTextSharp.text.Rectangle型の情報を取得することができます。 取得した情報の中にLeftだのBottomだのといったプロパティがあるのですが、狂っていない(?)pdfだと0になっています。 ここが0以外の数値になっていると、PdfStamperのSetTextMatrixで指定した座標からその分だけずれて出力されてしまいます。 例えばGetPageSizeで取得した情報のLeftが-30、Bottomが50として SetTextMatrix( x:=10, y:=120 ) をいうメソッドを走らせると、x=40、Bottom=70の位置に出力しようとします。 つまり(LeftもしくはBottom * -1)分だけ左あるいは下に動いてしまうわけです。 というわけで対策としては、SetTextMatrixメソッドでの座標指定時に、このずれた部分で補正してやることです。 VB.NETコードで表現すると・・・(何処かにシンタクスエラーがあるかもしれません)

Visual Studioのセットアッププロジェクトで必須コンポーネントをアプリケーションと同じ場所からインストールする場合の設定

つい最近、開発用のPCを変更した時に「あぁこれメモっておけば良かった」と思ったことがあったので。 Visual Studio 2008でアプリのインストーラを作る(セットアッププロジェクト)がありました。 この際、以下の通り注意しなければならない要件がありました。 .NET Framework 3.5などを使うアプリをインストールする インストール対象PCは.NET Frameworkもネット環境もない つまりアプリと同時に.NET Framework 3.5もインストールする必要があります。 この場合Visual Studioのセットアッププロジェクト内の「プロジェクトのプロパティ」の「必須コンポーネント」のところにある「アプリケーションと同じ場所から必須コンポーネントをダウンロードする」というオプションをチェックすれば良いだけなんですが、デフォルト環境のVisual Studioの場合 「エラー 7 必須コンポーネントのインストール場所が、'コンポーネントの開発元の Web サイト' に設定されていません。項目 [コンポーネント名] のファイル [ファイル名] がディスクに見つかりません。詳細については、ヘルプを参照してください。... というエラーが出てしまいます。 で、この解決方法。Microsoftのサイトに掲載されています。 http://connect.microsoft.com/VisualStudioJapan/feedback/details/388475/visual-studio-sp1-net-framework-3-5sp1 [S] --- 上記urlを一部引用 この問題を解決する方法としましては、Visual Studio 2008 SP1 の Readme で説明されている手順に従って、.NET Framework 3.5 用の Samesite オプションを有効にすることです。 この解決方法は、Readme の 2.3.1.1 に記載されており、オンラインの Readme は、こちらで見つけることができます: http://download.microsoft.com/download/A/2/8/A2807F78-C861-4B66-9B31-9205C3F22252/VS2008...

OleDbParameterはSQLの順番どおりにしないとダメ。

今日ハマったこと。 VB.NET 2008でDBへの更新SQLを書いたのだけど、なんでかAffectedRowが0。つまり更新されない。 SQLは↓こんな感じ。 UPDATE table1 SET name = @p_name, memo = @p_memo WHERE id = @p_id で、OleDbCommandにOleDbParameterをセットしていた行が↓こんな感じ。 oCmd = conn.CreateCommand() :   : oCmd.Parameters.Add( New OleDbParameter("@p_id",Me.ID) ) oCmd.Parameters.Add( New OleDbParameter("@p_name",Me.Name) ) oCmd.Parameters.Add( New OleDbParameter("@p_memo",Me.Memo) ) :   : oCmd.ExecuteNonQuery() こう書いたらうまくUpdateできませんでした。 原因はタイトルの通り、 SQLの順番通りにOleDbParameterをAddしないとダメ だということ。 つまり oCmd.Parameters.Add( New OleDbParameter("@p_id",Me.ID) ) oCmd.Parameters.Add( New OleDbParameter("@p_name",Me.Name) ) oCmd.Parameters.Add( New OleDbParameter("@p_memo",Me.Memo) ) oCmd.Parameters.Add( New OleDbParameter("@p_id",Me.ID) ) こうしないとダメだったようで。 じゃあOleDbParameterのコンストラクタの1番目の引数は一体なんの意味があるんだろうか・・。 2009.07.24. 23:33 追記 AffectedRowsが0じゃなくてException吐いたのかもしれないです。 確か「条件式のデータ型が合わない為、抽出できません」とか、そんな感じの例外(失念)。 抽...