【ASP.NET】Microsoft Visual Studio Community 2013 日本語化

「Microsoft Visual Studio Community 2013」を新たにインストールしたところ、英語表記になっていました。
いままでも英語表記だっけ?
と思いつつ日本語表記にしようと思ったので、その備忘録です。

まずは、TOOLS>Options>Environment>International Settings を開きます。
International_Settings

次にLanguageの選択で日本語が無いことを確認します。有ったらラッキーで終了。

たぶん、選択肢に日本語が入っていないので、Get additional Language をクリックしてMicrosoftのダウンロードセンターを呼び出します。
Dwonload_Center
「2013 Language Pack – 日本語」ダウンロードを実行して、「2013 Language Pack – 日本語」をインストール実行します。

2013LanguagePack
935MBも必要なんですねぇ~
ライセンス等に同意して、インストールを続けます。
暫くインストールの終了を待ちます。

インストールが終わったら、「Microsoft Visual Studio Community 2013」を起動して、
また、TOOLS>Options>Environment>International Settings を開きます。
Languageの選択で日本語が選択できます。
後は「Microsoft Visual Studio Community 2013」を再起動したら幸せになれます^^

以上

【ASP.NET】Express 2013 for WebでReportViewerを使うには? 

Express 2013 for Webには、ReportViewerがあらかじめインストールされていないため、Microsoft Report Viewer 2012 Runtimeをダウンロードしてきてインストールする必要が有ります。
ちなみに、Microsoft Report Viewer 2013 Runtimeを少し探してのですが、見つかりませんでした。
また、参照しているアセンブリのバージョンも11.0.0.0なので、Microsoft Report Viewer 2012 Runtimeで問題ないと判断しました。

ダウンロード先はググればすすぐに出てくると思いますので割愛します。
とりあえず、ダウンロードしてインストールします。

普通ならインストールした段階で参照できるようになっていると思いますが、私の環境では参照先が見当たりませんでした。
そこで参照画面から参照マネージャー画面を開き、右下の参照からファイルを選択する方法を取りました。

ファイルの場所は、探せば出てくると思いますし、環境によって異なる可能性も高いですが、目安として記述します。
windows/assembly/GAC_MSIL/Microsoft.ReportViewer.Common/11.0.0.0__89845(続く)/Microsoft.ReportViewer.Common.dll
windows/assembly/GAC_MSIL/Microsoft.ReportViewer.WebForms/11.0.0.0__89845(続く)/Microsoft.ReportViewer.WebForms.dll

備忘録まで

[ASP.NET] Remote ref to merge from was not fetched.

ASP.NETというか、Visual Stdio2013 ネタです。

Gitサーバと同期をとろうとしたところ、 Remote ref to merge from was not fetched.と出てしまいました。
今日作ったチームプロジェクトにプロジェクトを初めて追加しようとして発生しました。

よく意味が分かりませんが、マージするためにリモート参照が取得できなかった?という意味?
とりあえず、初回ということでサーバの情報は要らないので、Pushだけしたところ、なぜか上手く行きました。

備忘録として

【ASP.NET】「MsDeployServiceUrl のプロパティ値が設定されていないか、無効です」への対応

先日から以下のメッセージが出て、WindowsAzureに発行ができなくなってしまいました。

 ・MsDeployServiceUrl のプロパティ値が設定されていないか、無効です。
 ・”NormalizeServiceUrl” タスクは、必要なパラメーター “ServiceUrl” に対して値を指定されていませんでした。

いろいろ対応法を探していたところ、Windowsu Azure でWEBサイトに発行できない対処方法を発見。
このパッチを当てるらしい。。。http://go.microsoft.com/fwlink/?LinkId=253458

Hotfix for Visual Studio 2010 – KB2591016 – 日本語がダウンロードされたようです。
KB2591016の説明をパッと見ると、MVC3とかMVC4のWeb projectsで発生するエラーへの対応のようですが、 本不具合の解決の見当がつかなかったためダメ元(失敗したら再インストール覚悟)で試してみた。

結果は、治りました^^!
対処法を載せていただいてた『「でぶ」ですが何か』さん、ありがとうございます。

【ASP.NET】GridViewを使用してEXCEL出力を行う方法

GridViewを使用してEXCEL出力を行う方法の開発備忘録です。

たまに、EXCEL出力をしたいと要望が出ます。
そんな時の便利なやり方です。

Dim dt As DataTable = New XXXXXDataTable
Dim da As New YYYYYTableAdapters.XXXXXTableAdapter

da.Fill(dt)
Me.GridView.DataSource = dt
Me.GridView.DataBind()

Dim i As Integer
‘フォーマットを指定する場合
For i = 0 To Me.GridView3.Rows.Count – 1
Me.GridView3.Rows(i).Cells(1).Style.Add(“mso-number-format”, “\@”)
Me.GridView3.Rows(i).Cells(2).Style.Add(“mso-number-format”, “\@”)
Me.GridView3.Rows(i).Cells(3).Style.Add(“mso-number-format”, “\@”)
Next

‘ Set the content type to Excel.
Response.AddHeader(“content-disposition”, “attachment; filename=XXXXX_” & Now.ToString(“yyyyMMddhh”) & “.xls”)
Response.ContentType = “application/vnd.ms-excel”
Response.Charset = “”
‘ Turn off the view state.
Me.EnableViewState = False
Dim tw As New System.IO.StringWriter()
Dim hw As New System.Web.UI.HtmlTextWriter(tw)
‘ Get the HTML for the control.
Me.GridView.RenderControl(hw)
‘ Write the HTML back to the browser.
Response.Write(tw.ToString())
‘ End the response.
Response.End()

と、まぁ、こんな感じでできまます。

[JAVASCRIPT] PDFをWebブラウザから自動で印刷する方法

PDFをWebブラウザに簡単に印刷する備忘録です。
仕事では、1)クライアント側で印刷したい旨の情報をサーバ側に伝える。2)サーバ側で動的にPDFを作成して、そのPDFをWebサーバに配置(決まった場所に保存)して、保存したURLをクライアント側(Webブラウザ)に伝え、3)Webブラウザで(自動で)印刷する。というパターンが多いと思います。

今回は、一連の手順を示したいと思います。
1)これは、Jquey.ajaxを使えば簡単にサーバとの連携ができます。
具体的には、

//PDF作成依頼
var fileURLdata ;
fileURLdata = JSON.parse($.ajax({
url: "サーバ側処理URL.aspx?targetid=" + targetid --今回はASP.NETで処理しています
+ "&year=" + year --引数は処理に合わせて適当に
+ "&month=" + month
+ "&kbn=" + kbn
+ "&sub_cd=" + sub_cd
, async: false --ファイルの作成を待つため同期処理で
}).responseText);

2)サーバ側でPDF作成
細々とした部分は割愛して書きます。

try
Dim fileURL As String = "0"

'パラメータ取得
'year, month, targetid, 等々の取得

'定義ファイル指定
ReportViewer1.LocalReport.ReportPath = "xxxxx.aspx.rdlc"

'パラメータセット
param.Add(New ReportParameter("Report_Parameter_0", "パラメータ文言"))
ReportViewer1.LocalReport.SetParameters(param)

'データバインド
Dim oQA As New TableAdapters.xxxxxTableAdapter
Dim oDT As New xxxxx.xxxxxDataTable
oDT = oQA.GetData(year, month, targetid, kbn) 'クライアント側からパラメータで貰ったもの

Dim oRDS As New ReportDataSource
oRDS.Name = "DataSet1_xxxxx"
oRDS.Value = oDT
ReportViewer1.LocalReport.DataSources.Add(oRDS)

'データ再セット
ReportViewer1.LocalReport.Refresh()

Dim warnings As Warning() = Nothing
Dim streamids As String() = Nothing
Dim mineType As String = Nothing
Dim encoding As String = Nothing
Dim extension As String = Nothing
Dim bytes As Byte()

'PDFデータ取得
bytes = ReportViewer1.LocalReport.Render("PDF", Nothing, mineType, encoding, extension, streamids, warnings)

'PDFデータ書き出し
Dim outputfile As String = "指定ディレクトリ"
Dim snt As String = Now().ToString("yyyyMMddHHmmss")
outputfile += snt + "_" + sub_cd + "-" + targetid + ".pdf"

fileURL = "指定URLディレクトリ"
fileURL += snt + "_" + sub_cd + "-" + targetid + ".pdf"
Dim fs As New IO.FileStream(outputfile, IO.FileMode.Create)
fs.Write(bytes, 0, bytes.Length)
fs.Close()

Catch ex As Exception
fileURL = "0"

Finally
Dim result As New List(Of printInfo)
Dim pi As New printInfo()
pi.fileURL = fileURL
pi.alert1 = ""
pi.alert2 = ""
result.Add(pi)

Dim serializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
Response.Write(serializer.Serialize(result))
Response.End()

---------------
Public Class printInfo
Public fileURL As String
Public alert1 As String
Public alert2 As String
End Class

3)Webブラウザで(自動で)印刷する

//ファイル作成成否確認
if (fileURLdata[0].fileURL == "0") { alert("印刷用PDF作成に失敗しました"); (window.open('', '_self').opener = window).close(); }

//ファイル名取得
var fileURL = fileURLdata[0].fileURL;

//OBJECTタグを作成
var tid = 'objPdf' + targetid + jQuery.now().toString();
var obj = document.createElement('object');
obj.setAttribute('id', tid);
obj.setAttribute('classid', 'clsid:CA8A9780-280D-11CF-A24D-444553540000'); // PDFのクラスID(固定値)
obj.setAttribute('height', '1');
obj.setAttribute('width', '1');

//PDFのソースを設定
var param = document.createElement('param');
param.setAttribute('name', 'src');
param.setAttribute('value', fileURL);
obj.appendChild(param);

//作成したOBJECTタグをDIVタグの中にセット
$("
<div id="pdfDiv&quot; + i + &quot;" style="border-style: none; height: 1px; width: 1px; background-color: #ffffff;"></div>
").appendTo($("#div_footter"));--差し障りの無い所へ追加
var div = document.getElementById('pdfDiv' + i);
div.appendChild(obj);
div.innerHTML = obj.outerHTML;

document.getElementById(tid).printAll();

以上です。

【ASP.NET】見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外: 0x80131040)

先月くらいから、私の開発環境で『見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外: 0x80131040)』のエラーが発生しました。
ちなみに私のエラーは、PC環境を変えたため、必要なDLLが見つからないというエラーではありません。

エラーの背景に社外・社内を問わずプログラム修正を行いたいため、開発に使用しているPCが数台あります。
ちゃんと費用を掛けてネットワーク構築及びVSSやTFSを立てたりすれば発生しないエラーかもしれないのですが、一人開発なので勿体無くて費用をかけていません。そのかわり利便性を向上させるために、どこからでもアクセスできるようインターネット上にディスクスペースを借りてそこにソースを置いています。
一人なので排他制御しなくていいし。

で、今まではWindows7+VS2010で主に開発をしていました。
最近は、Windows8+VS2012/VS2010の環境が入ってきて混在している状況です。
今までは上の問題が出て記憶が無いのですが、最近、社内はWindows8(64bit)、社外はWindows7(64bit/32bit)の混在でプログラムを修正するようなケースが発生したためか、3回程度発生しています。

64bit/32bitの混在が不味いのか。。。。Windows8+VS2010/windows7+VS2010の環境がいけないのか。。。
その両方なのか。。。

たまにしか発生していないのですが、64bit開発マシンで修正後32bit開発マシンで修正する際に発生しているので(頻発するわけだなくたまになので曖昧です。。。)、64bit/32bitの混在が不味い気がするのですが。。。

で、原因がはっきりわからない(きちんと調べても居ません)ので対処が正解かわからないのですが、いつも手っ取り早く修正したい時に発生するので、自分用にとりあえずの対処法を備忘録としてメモっておきます。

(対応)プロジェクトフォルダ内のbinフォルダに上のメッセージで読み込めないと名指しされているxxxxx.dllが存在しているので、そのdllファイルを削除してしまいます。

上の作業で、エラーが消えます。私のエラーの場合です。
一般的な、DLLが見つからない、読めない等々のエラーの場合は、本当に無いか、バージョン違いや64bit-dllを32bit環境で読もうとしてエラーが出ているなどなどなので、上の対応はもちろん該当しません。

以上、エラー対応備忘録でした。

【ASP.NET】Response.End()に呼出によるThreadAbortException 例外対応

今回は、ajax通信でサーバからデータを貰う際の簡易受けプログラムの備忘録です。

JavaScriptやJqueryでajax通信でデータを受け渡しする際、受け側のサーバプログラムにはWebServiceやWCFサービスなどを使う場合も多いと思いますが、基本的にクライアントとサービスのプロジェクトを別けるように設計していると思います。
でも、ちょっとしたデータの取得だけならわざわざサービス用のプロジェクトを立ち上げるのも面倒という場合もあるかと思います。
私はそんな場合は、通常のaspxをサービスで使用しています。
ちょっとした非同期通信で画面の遷移がなく画面の情報が更新されるプログラムにJSONと一緒に使用しています。
その他では、PDFファイルを裏で作成する際とかでも使用しています。

で、今回の備忘録ですが、Response.End()を呼出すとThreadAbortException 例外が発生してしまいます。
エラーハンドリングにTry chachを入れていると思いますが、引っかっかってしまいますよね。
 _HResult  -2146233040
 _message  スレッドを中止しようとしました。
なので、
Catch ex As ThreadAbortException
  ’ End()の呼び出しによる、ThreadAbortException 例外対応
で処理します。

どうという内容ではないのですが、備忘録としてメモっておきます。

[ASP.NET] 2010 マスターページを使用した場合のプログラムからmetaタグの追加

先ほど、プログラムからタイトルを更新する開発備忘録のメモを残しました。
今回は、descriptionやkeywordを追加するメモです。

これも至って簡単で、Page_Loadの中で以下のようにするだけです。

‘description設定
Dim meta1 As HtmlMeta = New HtmlMeta()
meta1.Name = “description”
meta1.Content = “description文字列”
Page.Header.Controls.Add(meta1)

‘keywords設定
Dim meta2 As HtmlMeta = New HtmlMeta()
meta2.Name = “keywords”
meta2.Content = “keywords文字列”
Page.Header.Controls.Add(meta2)

その他、metaタグで自動的に指定した秒数後に特定のページにジャンプさせることもできます。
‘自動的に他のページにジャンプ
Dim meta3 As HtmlMeta = New HtmlMeta()
meta3.httpequiv=”refresh”
meta3.content=”秒数;URL=URL”
Page.Header.Controls.Add(meta3)

authorとかも追加でき、いろいろできます。 以上

[ASP.NET] 2010 マスターページを使用した場合のTitle変更2

以前にASPXファイルの<%@ Page ・・・%>の部分でTitleを変更する開発備忘録メモを残しましたが、今回はプログラムから変更する方法をメモします。
SEOを意識すると自動作成ページのタイトルをプログラムから変更したですからね。

とっても簡単です。Page_Loadの中で以下のようにするだけです。

‘タイトル設定
Me.Title = “タイトル文字列”

以上