Question

VBの技術者 on Fri, 10 Mar 2017 08:30:14


みなさん、よろしくお願いいたします。
先ほど、回答いただいた方ありがとうございました。
参考になりました。
ただ、質問内容を間違えておりました。申し訳ありません。
改めて、質問させていただけないでしょうか。

VSIXプロジェクトを作ろうと勉強しております。
その中で、普通にWinフォームを作って、MsgBox("Test")のようにしたいのですが、
コンパイルエラーになってしまいます。
参照が足りないと思っています。
Winフォームプロジェクトと同じように、参照を追加したりして試しても、
状況は変わりません。
どのようにすれば、MsgBox等の一般に使われている関数群を使えるのでしょうか?


再現する方法は簡単です。
新しいプロジェクト-VB-Extensibility-VSIX Project で新規プロジェクトを作る。
プロジェクトに、Windowsフォームを追加する。
Form1_Load()に、MsgBox("Test")を書き、コンパイルする。

下記のエラーが出ます。
エラー BC30451 'MsgBox' は宣言されていません。アクセスできない保護レベルになっています。 VSIXProject9 c:\users\admin\documents\visual studio 2015\Projects\VSIXProject9\VSIXProject9\Form1.vb 3 アクティブ

参照設定も、既に参照されているというエラーの出るSystem.Core以外は追加してみました。
VB2015を使っています。



Sponsored



Replies

kenjinote on Fri, 10 Mar 2017 09:13:04


試してみました。

私の環境の場合は、再現の手順から、参照設定で「System.Windows.Forms」と「System.Drawing」を追加する必要がありました。これらは、プロジェクトメニューの「新しい項目の追加」から Windows フォーム を選ぶと自動的に参照として追加されるようです。

結果的に参照設定は下記のようになっていました。

上記の参照設定で、以下のようなコードのコンパイルができました。

Imports System.Windows.Forms

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        MsgBox("Test")
    End Sub
End Class

aviator__ on Fri, 10 Mar 2017 09:13:35


Microsoft.VisualBasic.dllに対する参照をご確認下さい。

SurferOnWww on Sat, 11 Mar 2017 02:04:00


スレッドを乱立しないで、このスレッドに続けて書いていただきたく。間違い、情報不足はこのスレッドで補えば済むことです。(ただし、最初の質問を書き換えないでください。別のレスとして補足・訂正を書いてください。上から読んでいって訳が分からなくならないように)

このスレッドをほっぽり出して、新に別のスレッドを立てるというのは、ここで回答をくれた人に大変失礼になると思います。

kenjinote on Sat, 11 Mar 2017 02:46:23


すみません。VB-Extensibility の VSIX Project とのことですが、

MsgBoxを使っているコードの、先頭に

Imports Microsoft.VisualBasic

を追加してみて解消しますでしょうか?

SurferOnWww on Sat, 11 Mar 2017 03:16:38


VB.NET は使わない自分が言うのもなんですが、microsoft.visualbasic 名前空間のクラス、メソッドは使わない(できるだけ)という方向に進むことをお勧めします。

第6回 VB開発者が最新.NET Frameworkを効率よく習得する方法
http://www.atmarkit.co.jp/fdotnet/vblab/opensemi_06/opensemi_06_02.html

#最初の質問を書き換えないでくださいとお願いしたのに無視されたのは残念です。

VBの技術者 on Sat, 11 Mar 2017 03:58:35


すみません。VB-Extensibility の VSIX Project とのことですが、

MsgBoxを使っているコードの、先頭に

Imports Microsoft.VisualBasic

を追加してみて解消しますでしょうか?

ありがとうございます!!
びっくりしました。
思ったようになりました。
感謝です。

もし、よろしければ、追加でお伺いしてよろしいでしょうか?
今回は、数十の既存VBファイルを移行するのです。
そこで、すべてのソースに下記のコードいれれば良いのですが
できれば、一箇所で設定するような事はできないでしょうか?
Imports Microsoft.VisualBasic

回答ありがとうございます。


VBの技術者 on Sat, 11 Mar 2017 04:00:42


> 方向に進むことをお勧めします。
ご指摘ありがとうございます。
その通りだと思います。
ただ、先にも書いたように、既存VBファイルを移行する関係で
できる限り変更箇所を減らしたいのが現状です。

> #無視されたのは残念です。
申し訳ありません。
どのように書き換えたらわかりやすいのかが難しく、今回のように
形にさせていただきました。
決して、無視をしたのではないのです。今後は正しく投稿するように努めます。


kenjinote on Sat, 11 Mar 2017 04:29:14


プロジェクトのプロパティ画面を開き、「参照」タブ→「インポートされた名前空間」の下のリストで「Microsoft.VisualBasic」にチェックをつけると、*.vb で Imports を指定しなくても MsgBox が使用できるようになると思います。

VBの技術者 on Sat, 11 Mar 2017 06:32:15


本当に、ありがとうございました。

その通りになり、問題が解決しそうです。

SurferOnWww on Sat, 11 Mar 2017 07:07:09


aviator__ さんのレスは回答にならなかったのでしょうか? 私の余計なお世話的レスより、aviator__ さんのレスの方が回答にふさわしいと思うのですが。

aviator__ on Sat, 11 Mar 2017 07:21:43


SurferOnWww様 わざわざ有難うございます。

でもまぁ、質問者様の判断なので全然OKですよん。