タグ: ASP.NET

  • ASP.NETのプログラムを新環境にデプロイしたら「有効な Win32 アプリケーション」とエラーがでる

    古いASP.NETのプログラムを、新しい環境でコンパイルして、アプリケーションサーバ(IIS)にデプロイして、テストしたら、下記のエラーが表示された。Visual Studio 2019上では動作している。

    ファイルまたはアセンブリ 'xxxxxxxx.DLL'、またはその依存関係の 1 つが読み込めませんでした。 は有効な Win32 アプリケーションではありません。 (HRESULT からの例外:0x800700C1) 

    問題は、アプリケーションサーバであるIISの設定だった。Windows Server 2019のIIS10は、デフォルトでは64ビットのアプリケーションサーバとして動作する。そのため、32ビットのDLLが混じったアプリケーションを実行するためには、IISの設定で、32ビットのアプリケーションを動作するようにしないといけなかった。

    32ビットのアプリケーションを動作するようにするIISの設定方法は下記。

    1. IISマネージャー(インターネットインフォメーションサーバーマネージャー)を開く。
    2. アプリケーションプールを選択する。
    3. 右クリックして、「詳細設定」を開く。
    4. 全般にある「32ビット アプリケーションの有効化」のプルダウンで、「True」を選択する。
    5. OKをクリックする
    6. アプリケーションタスクで、「停止」して「開始」する(たぶん、リサイクルでもOK)

    これで、32ビットのアプリケーションも動作するようになる。

  • VS2008のアプリをVS2019で開いて、デバック実行したら「Assembly.csが見つかりません」が表示された

    VS2008のアプリをVS2019で開いて、デバック実行したら「Assembly.csが見つかりません」が表示された。「Assembly.cs」を探したが見つからず。元のプロジェクトはVB.NETで書かれている。

    VS2019上には、逆コンパイルで作成も選択できたので、実行してみたが失敗した。

    失敗したので、今度は、Assenbly情報を再作成した。

    1. ソリューションエクスプローラーでプロジェクトを選び、右クリックからプロパティを開く。
    2. 「アプリケーション」を選択する。
    3. 「アセンブリ情報(Y)」をクリックする。
    4. ウィンドウが立ち上がるので、確認してOKをクリックする(なにも変更しなくてもよい)
    5. プロジェクトのリビルドを行う。
    6. デバック実行して、同じエラーにならないかを確認する。

    これでエラーが出なくなった。

  • VS2008のソリューションをVS2019に変更したら、Request.ServerVariables(“LOGON_USER”)で値がとれなくなったら

    Visual Studio 2008のソリューションを、Visual Studio 2019の形式に変換した。.NET Frameworkも3.5から4.8に変更した。Visual Studio 2019でデバック実行したところ、ログインユーザの値が「Request.ServerVariables(“LOGON_USER”)」でとれなくなった。

    言語のバージョンか、.NET Frameworkのバージョン違いか、調べたが、ちゃんと残っていた。

    変わっていたのは、Visual Studio 2019上での開発サーバー(IIS)の設定値だった。プロジェクトのプロパティを開いたところ、開発サーバーの設定があり、そこの設定では、「Windows認証」が無効で、「匿名認証」が有効になっていた。これだと、LOGONしたことになっていないので、「LOGON_USER」の値は、空になる。

    開発サーバーの設定を、「Windows 認証」を有効にし、「匿名認証」を無効にした。その後、デバック実行して確認したところ、正常にログオンユーザが取れた。

  • VBは、.NET5でもサポートされるけど、新機能はなし。

    前々から、VB(Visual Basic)は終息傾向にあったのはわかっていたけれど、今回、明確に「.NET 5」への対応と、VBでの新規機能の開発はやらないという発表された。過去との互換性重視になるのとのこと。なので、新機能の追加はなく、ゆっくりとした終息になっていく。長く使えたんじゃないだろうか。あとは、OfficeのVBSがどうなるのか。Office上でもJavaScripts(Office Scriptsという)が使えるようになるので、VBSからOffice Scriptsへ移行が促されていくのだろう。

    https://devblogs.microsoft.com/vbteam/visual-basic-support-planned-for-net-5-0/

  • デバック実行時に「~~~\bin\rosylyn\csc.exe」の一部が見つかりませんと表示される

    人から受けとったASP.NET MVCのプログラムをVisual Studio 2019でデバック実行したところ、下記のエラーが発生した。

    '/' アプリケーションでサーバー エラーが発生しました。
    
    パス 'C:\xxxx\xxxx\xxxx\bin\roslyn\csc.exe' の一部が見つかりませんでした。
    

    調べていったところ、NuGetにある「Microsoft.CodeDom.Providers.DotNetCompilerPlatform」のパッケージのバージョンをアップデートしたところ、この問題が解消され、このエラーは解消された。

    依存関係の問題なので、アップデートではなく、「Microsoft.CodeDom.Providers.DotNetCompilerPlatform」の再インストールでも解決すると思われる。

  • VB.NET 2008 (ASP.NET)でテキストボックスでEnterキーを押下したときに実行されるボタン指定する方法

    VB.NETで作成したウェブアプリのテキストボックス等でEnterキーを押したときに実行されるボタンを指定したい。
    通常は、ウェブのForm上にあるボタンのうち、一番最初に記述された(配置された)ボタンになっている。
    Enterキーを押したときに動作するボタンを指定する方法は以下。

    1. Enterキーを押下したときに実行するボタンのプロパティから、UseSubmitBehiviorを探し、Trueになっていることを確認する。
    2. 次にEnterキーを押下したときに実行したくないボタンのプロパティのUseSubmitBehiviorの値をFalseに変更する。
    3. 他のボタンも同じようにFalseに変更する。

    この方法でEnterキーを押した際に、1で設定したボタンが実行されるようになる。
    ただし、この方法で実行できるのは1つのボタンだけなので注意。

    Webでは、FormのAcceptButtonプロパティで設定する方法が多数見つかる。
    だが、VWD2008で設定を行おうとするとAcceptButton?プロパティは見つからず設定ができない。
    そのため、UseSubmitBehaviorで設定する。
    より正確に言えば、UseSubmitBehaviorは、PostBackが走った時に実行されるボタンクリックイベントについての記述になる。
    このプロパティの値がTrueのもので一番最初のものが実行されているに過ぎない。
    そのため、EnterキーでなくてもPostBackが走るのであれば実行される(はず)。