アーカイブ

Archive for the ‘Visual Basic’ Category

Riderでマルチスタートアップ

Visual Studioで複数プロジェクトをいっぺんに実行したりデバックしたりする場合、ソリューションのスタートアッププロジェクト設定でマルチスタートアップから実行するプロジェクトを選択します。

Riderでは複合実行という設定で同じように複数プロジェクトを実行することができます。
マニュアルでは、複合ってなっているんだけれど、IDEではCompoundって名前ですね。
https://pleiades.io/help/rider/Creating_Compound_Run_Debug_Configuration.html

広告
カテゴリー:ASP.NET, Visual Basic

ASP.NET WebAPIをVB.NETで利用する場合に、ヘルプページのコメントを利用する。

ASP.NETではVB.NETの積極的なサポートがなくなりつつ有るこの頃ですが、うちのちかくではVB.NETの要望が収まらず、VB.NET+WebAPIでアプリを作っています。

この頃のVisual StudioのWebAPIプロジェクトでは、APIのヘルプページを自動的に作成する機能が提供されていますが標準のままだと、ドキュメンテーションコメントを書いてもDescriptionに反映してくれません。

検索すると、Areas/App_Start/HelpPageConfigの下記コメントを外せという指示とともにWebプロジェクトのビルド設定で、ドキュメンテーションコメントを吐き出す場所を設定しろという記事が目につきます。

Public Sub Register(config As HttpConfiguration)
    '' Uncomment the following to use the documentation from XML documentation file.
    'config.SetDocumentationProvider(New XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")))

 

C#のWebプロジェクトのビルドプロパティー

image

VB.NETのWebプロジェクトのコンパイルプロパティー

image

ところがVB.NETのASP.NETプロジェクトではこの項目がありません。ただ、VB.NETのプロジェクトファイルにもProject/PropertyGroup/DocumentationFile要素はあるのでこいつにパスを指定すれば大丈夫だろ。と思ったのですが、、、出てくれません。無視されるようです。。。

ただ、まぁ指定のフォルダーにドキュメンテーションコメントがコピーされればいいので、ビルド後イベントを使ってあげましょう。

image

copy "$(ProjectDir)bin\$(TargetName).xml" "$(ProjectDir)App_Data\"

カテゴリー:ASP.NET, Visual Basic

.NET Fiddle

久々にRSSを眺めてたら見つけました。

いつのまにやらこんなものがあったんですね。

時たまカーソルがおかしくなるけれど、インテリセンスもしっかりしていて良いと思います。

https://dotnetfiddle.net/

キャプチャ

サポートしている言語は「C#,VB.NET、F#」と何かとハブられているVB.NETが入っていてポイント高いです。ただ、VB.NETはちょっと構文チェックがきつい気もする。

プロジェクトのタイプはこんな感じです。まぁサーバー側で動作するので今のところWinodowsアプリは実行できないみたいですね。

image

ついにこの時が、、、No More WebForms, No More Visual Basic

Top 10 Changes in ASP.NET 5 and MVC 6

いや、わかってたんですよ。わかってはいましたが、、、

No More Web Forms

You can continue to build Web Forms apps in Visual Studio 2015 by targeting the .NET 4.6 framework. However, Web Forms apps cannot take advantage of any of the cool new features of ASP.NET 5 described in this list. If you don’t want to be left behind as history marches forward then it is finally time for you to rewrite your Web Forms app into ASP.NET MVC.

超意訳

引き続きVisual Studio 2015でも.NET 4.6を選択すればWebFormsのビルドを行うことができます。しかし、ASP.NET WebFormsではASP.NET 5の新機能を利用することはできません。これはASP.NETの進化に取り残されたくない場合ASP.NET WebFormsアプリをASP.NET MVCアプリに書き換えるための猶予期間なのです。

カテゴリー:ASP.NET, Visual Basic タグ:

VB14で新しく増える構文で個人的に気に入っている構文ベスト3

VB TeamブログでVB14で採用される新しい構文について解説のエントリーが上がっています。
New Language Features in Visual Basic 14 (non-animated)

全体的に今までむず痒かった部分に手が入った感じですね。個人的にベスト3上げるとこの辺りが特に嬉しい!!

1位. 文字列の拡張書式構文

String.Formatの糖衣構文ですね。今までのString.Formatよりも可読性が上がって良い感じです。

まだPreviewには入っていないようです。(なんて訳せばいいんだろう。。。)

2位. 行継続中のコメント

これもなにげに嬉しい。VB10で行継続が明らかな場合は行継続子(_)が不要になりましたが、行継続中のコメントは相変わらず受け入れてくれなかったんですよね。

3位 ?.オペレーター

?.オペレーターは今までのVBから見るとちょっと驚く構文ですよね。記号っぽい構文はできるだけ採用してこなかったVBなのでびっくりしましたが、シンプルに書けるのは良い感じです。

まだ確認していないんだけれどこれらは糖衣構文なので、Visual Studio 14を使えばターゲーットフレームワークをVB14より低くしても問題ない機能ってことでいいのかな?

ASP.NET Web APIのサービスをJSONPで呼び出す。

2014年7月9日 3件のコメント

MSDNフォーラムをのぞいたら、こんなスレッドがあったのでWeb APIの入門を兼ねていじってみます。

クロスドメインリクエストへの対応については松崎さんのブログで詳しくまとまっています。

JSONP などクロス ドメイン (Cross-Domain) 問題の回避と諸注意

Web Apiの追加

まずは何も考えずに、WebApiを一つ追加しましょう。

image image

名前はとりあえずUserControllerとかにしておきます。

image 

とりあえずそのまま動作を確認してみる

この状態で http://host/api/user/http://host/api/user/1 といったURLをリクエストすれば、[ “value1”, “value2" ] や “value” といったJSON文字列が取得できるはずです。

FiddlerやChromeのAdvanced Rest Clientなんかから確認してみましょう。

一応それっぽい文字列が帰ってきていますね。

image

jQueryから呼び出してみる。

jQueryのajax関数から呼び出すとするとこんなかんじですね。

$("#getUser").on("click", function () {
    var userId = $("#userId").val();
    $.ajax({
        url: "http://localhost:45924/api/user/" + userId,
        type: 'GET',
        dataType: 'json'
    }).success(function (data) {
        alert(data);
    }).error(function(data) {
        alert(data);
    });
});

ちゃんと返ってきました。

image

Web ApiをJSONPに対応させる。

Web ApiでJSONP形式で値を返したい場合は、NugetパッケージのWebApiContrib.Formatting.Jsonpを使うと簡単に実現できます。前述のパッケージを導入後、Global.asaxやWebApiConfigなどのクラスでコールバック付き(?callback=関数名)のリクエストを受け付けた場合にJSONP形式に整形するFormatterを登録します。

Public Module WebApiConfig
    Public Sub Register(ByVal config As HttpConfiguration)
        ' Web API の設定およびサービス

        ' Web API ルート
        config.MapHttpAttributeRoutes()

        config.Routes.MapHttpRoute(
            name:="DefaultApi",
            routeTemplate:="api/{controller}/{id}",
            defaults:=New With {.id = RouteParameter.Optional}
        )

        config.AddJsonpFormatter()
    End Sub
End Module

ちょっと見えづらいですが、Responseタブの中身を見ると、JSONP形式(a([“value1”, “value2”]))で結果が帰ってきたのを確認できます。

image

jQueryから呼び出す。

jQueryを使っている場合は、ajax関数のdataTypeパラメーターに”jsonp”を指定するだけですね。

$(function() {
    $("#getUser").on("click", function () {
        var userId = $("#userId").val();

        $.ajax({
            url: "http://localhost:45924/api/user/" + userId,
            type: 'GET',
            dataType: 'jsonp'
        }).success(function (data) {
            alert(data);
        }).error(function(data) {
            alert(data);
        });
    });
});
カテゴリー:ASP.NET, Javascript, Visual Basic

HttpContextをUnitTestで使う

UnitTestだとHttpContextが空になるんだけれど、UnitTest中にRequest.Formってどうにか参照できないの?って聞かれました。

サービスクラスの中でHttpContextやHttpRequestを直に参照しないような設計をすればいいんですが、今からだと難しいらしいので、昔の記憶をほじくり返してみる。そういえばHttpSimulatorってのがありましたね。前はC#のソースからビルドしたような気がするけれど、今だとDLLがNugetで公開されているんですね。

HttpSimulator 1.0.0<https://www.nuget.org/packages/HttpSimulator/>

テストプロジェクトにNugetでImstall-Package HttpSimulatorをしたら、HttpSimulatorクラスを作って、Formの値やSessionの値を設定して、SimulateRequestを呼び出してあげましょう。SimulateRequestした後ならHttpContext.CurrentからFormやRequestにアクセスすれば何事のなく利用できます。

<TestClass()> 
Public Class Class1Test
<TestMethod()>
Public Sub RequestFormのxとyの値を足した値が取得できること()
Using simulator = New HttpSimulator().
SetFormVariable("x", "1").
SetFormVariable("y", "2").
SimulateRequest()

Dim target = New Class1()
Assert.AreEqual(3D, target.FormCalc())
End Using
End Sub
End Class
Public Class Class1
Public Function FormCalc() As Decimal
Return Integer.Parse(HttpContext.Current.Request.Form("x")) +
Integer.Parse(HttpContext.Current.Request.Form("y"))
End Function
End Class

カテゴリー:ASP.NET, Visual Basic