質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

6786閲覧

VScodeのインテリセンスが反応しない

BeatStar

総合スコア4958

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2021/09/30 07:29

編集2021/10/03 10:52

本来は非推奨ですが、とある理由でVC#が使えないため VSCodeを使って C# ( .NET Framework )を組もうとしています。
しかし、なぜかVSCodeでのインテリセンスが反応しません。

※ VSCodeは外付けHDDにあり、作成しようとしているプロジェクトはデスクトップにあります。

(書き忘れていましたが、「オフラインでの開発」が前提としています。もちろんDL時はオンラインですが)

Flow: 1. VSCode(zip版)をDL 2. ポータブル化するためにcode.exeがあるフォルダ内にdataフォルダを作成 3. 起動 4. 拡張機能で"japanese" (Japanese Language Pack for Visual Studio Code v1.60.4)を追加 5. VSCodeを再起動 6. C# ( C# for Visual Studio Code(powered by OmniSharp) ) をインストール 7. 対象ファイル群があるフォルダをVSCodeにD&D 8. 「このフォルダー内のファイルの作成者を信頼しますか」で「はい」を選択 9. 「.NET Framework 4.7がインストールされていないからインストールするか」的なものでNOを選択 10. 「ファイル」-> 「ユーザ設定」-> 「設定」で「ユーザー」の設定(json)を開く 11. "autoGuessEncoding": true を追加 (jsonファイルに) 12. 再起動 13. C# XML Documentation Comments v0.1.20 をインストール 14. すでに書かれているコードでのインスタンス化している行のクラス名にカーソルを当てる 15. 何も変化がない

※ Flow (9)は Core の方ではなく Frameworkの方だったようです…

この(14)のコードはちょっとここで提示するには大掛かりなので割愛しますが、

var obj = new Test1.Class1( 100 );

のようなコードだと、Class1にカーソルを当てるとXMLドキュメントとして書いたsummary等が表示されるはずですが、
なにも変化がありません。(もちろんnamespace Test1や Class1クラスにもコンストラクタにもXMLドキュメントとしてsummaryは必ず書かれているとします)

試しに新規でやってみました。

Flow: 16. 「ファイル」-> 「新規ウィンドウ」で新しいウィンドウを表示してそこに切り替える 17. main.csを作成 18. main.csがあるフォルダ内にLibsフォルダを作成 19. Libsフォルダ内にClass1.csを作成 20. compile.batを作成し、中身はcscで直接コンパイルするものとする 21. 「ターミナル」->「新しいターミナル」でCommand Promptを起動 22. compile.batでコンパイル

C#

1// main.cs 2using System; 3 4namespace Test1{ 5 class TestABC{ 6 public static void Main( string[] args ){ 7 Test1.Libs.Class1 obj = Test1.Libs.Class1.Factory( 100 ); 8 obj.Print(); 9 } 10 } 11}

C#

1// .\Libs\Class1.cs 2/// <summary> 3/// 適当な名前空間1 4/// </summary> 5namespace Test1{ 6 /// <summary> 7 /// 適当な名前空間2 8 /// </summary> 9 namespace Libs{ 10 /// <summary> 11 /// 適当なクラス 12 /// </summary> 13 public class Class1{ 14 /// <summary> 15 /// Factoryパターン 16 /// </summary> 17 /// <param name="n">適当な値</param> 18 /// <returns>適当~</returns> 19 public static Class1 Factory( int n ){ 20 return new Class1( n ); 21 } 22 23 /// <summary> 24 /// コンストラクタっす 25 /// </summary> 26 /// <param name="n">適当な値</param> 27 private Class1( int n ){ 28 this.n = n; 29 } 30 31 /// <summary> 32 /// 表示系 33 /// </summary> 34 public void Print(){ 35 System.Console.WriteLine( this.n ); 36 } 37 38 /// <value> 39 /// 適当なデータ 40 /// </value> 41 private int n; 42 } 43 } 44}

(batファイルは単純にcscを呼び出してコンパイルしているだけなので割愛)

以前のなら public static Class1 Factory( int n ){...} の上に「1 Reference」とかみたいに出て、
main.csのTest1.Libs.Class1.Factory( 100 );のFactoryメソッドにカーソルを合わせると、
引数はこれこれ、戻り値はこれこれとsummaryやらなんやらが書かれたやつが出てきたはずです。
それに、このTest1.Libs.Class1.Printメソッド内の System.Console.WriteLine( this.n ); もsummaryやらなんやらが出ません。

以前使ったときはインテリセンスが反応して、ちゃんと自分が組んだクラスとかでも反応がありましたが。

拡張機能が足りないだけなのでしょうか。

もし拡張機能が足りないだけならこのC#インテリセンス用の拡張機能を教えて頂きたいです。

[情報]
言語: C#
VSCodeのバージョン: 1.60.2
OS: Windows 8, 10


[追記1]

(ひよこのアイコンの)「Snippet」,「C# Snippets v1.1.0」をそれぞれインストールしてみましたが、変わりませんでした。
「C# Extensions v1.3.1」も入れてみましたが、それでも変わりません。

参考:
公式, 参考1, 参考2


[追記2]

「VSCode C# intelliSense」と検索してみました。

参考3ではそもそも前提
が.NET Core前提なので違います。
(dotnetを使うし)

参考4参5も同じです。

参考6は関係のありそうなもの(NuGet等以外)はインストールしてみましたが変わりません。
方法自体も上の参考と同じですし。

参考7では、

I was able to resolve my issue by installing the correct SDK of .net core

(= .NET Core SDKをインストールしたら解決しました)

とあるので、.NET Coreをここから、Binaries(Windows x64)をDL&インストールして、
コマンドプロンプトでパスを通し、コマンドプロンプトからcode.exe (VSCode)を起動しました。
それでも変わりませんでした。

(どうしてもオフラインでやらないといけないので)

参考8ではUnityなので除外。

参考9では、「slnファイルがあるはずだからそれを使え」とあります。
ですが私が以前やっていたものだとそんなものは使った覚えもありませんし…。

今のところ、試したものはこれぐらいでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/10/01 05:18

vscode c# intellisense で検索すると結構ヒットしますけど、どの程度自身で試しました?
BeatStar

2021/10/02 14:05 編集

@ radianさん 本質問に追記しました。 ちなみに最初のやつでは「VSCode C#」等でやったものです。
Zuishin

2021/10/02 14:15

プロジェクトもソリューションも作っていないのでは、言語バージョンもわからないと思いますが。 試しに作ればいいのでは?
guest

回答2

0

ベストアンサー

質問にプロジェクトファイル作成の手順がなかったので、.cs のみでインテリセンスが効くかどうか試してみたところ、効きませんでした。
次の手順でプロジェクトファイルを追加して試してみてください。

main.cs のあるフォルダを仮に Sample という名前だとします。
まず vscode を起動し、Sample フォルダを開いてください。(ファイルではなくフォルダです)
そのフォルダに Sample.csproj を作り、その内容を以下のように書いて保存してください。
net48 は、.NET Framework 4.8 をターゲットにするという意味です。
他のバージョンをターゲットにする場合は適宜書き換えてください。

<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net48</TargetFramework> <UseWindowsForms>true</UseWindowsForms> </PropertyGroup> </Project>

そして vscode をいったん閉じ、再度 vscode で Sample フォルダを開きます。
そうすると、プロジェクト選択をするよう促されるので、Sample.proj を選択してください。
main.cs を開き、Ominisharp server が起動して構文が色分けされるまで待ってください。

以上でインテリセンスが効くようになりました。

投稿2021/10/03 05:44

編集2021/10/03 05:46
Zuishin

総合スコア28662

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2021/10/03 05:53

こちらではソリューションファイルまでは必要ありませんでしたが、これでも効かない場合は念のためソリューションファイルの作成も試してみてください。 まず PowerShell またはコマンドプロンプトを開き、当該フォルダ(Sample)をカレントディレクトリにします。 次に以下のコマンドを実行します。 dotnet new sln dotnet sln add Sample.csproj 以上です。 dotnet コマンドが無い場合はあらかじめインストールしておいてください。
BeatStar

2021/10/03 10:22

出来ました! ただ、追加で申し訳ないですが、回答でいう、Sampleフォルダ内にbinフォルダ等が生成されます。 このbinフォルダ以下( bin\Debug\net40 等 )を生成しないようにできませんか? csc 等のコンパイラが吐いているならわかりますが、VSCode側がやっているようなので。 できればこの余計なフォルダは生成したくないのですが。 不可能ならそのままでいいですけど。 私なりに「VSCode bin 生成しない」で検索してみましたが、良くて.NET Core、あるいはVC# についてでした…
Zuishin

2021/10/03 10:43

PropertyGroup 以下に次のタグを入れると bin と obj のパスが指定できます。 これは成果物を出力するフォルダなので必須です。 <BaseOutputPath>..\bin</BaseOutputPath> <BaseIntermediateOutputPath>..\obj\</BaseIntermediateOutputPath> C# はコンパイル言語なので、これを生成したくない場合は csi や dotnet-script を使うか、GenerateInMemory を指定するくらいでしょう。これらについてはこの質問の範疇にないので、自分で調べてください。
BeatStar

2021/10/03 10:44

ありがとうございます。
Zuishin

2021/10/03 10:56

誤解があるようなので補足しておきます。 > csc 等のコンパイラが吐いているならわかりますが、VSCode側がやっているようなので。 csc が作っています。 > できればこの余計なフォルダは生成したくないのですが。 余計なフォルダではなく、必須フォルダです。
BeatStar

2021/10/03 11:00

補足ありがとうございます。 あそうなんですか…。 cscだけでコンパイルするときには見たことがなかったので…
BeatStar

2021/10/03 11:28

アドバイスありがとうございます。 体力があれば研究してみます
guest

0

Zuishinさんの回答がドンピシャでしたが、若干違う部分があったので追記的な感じで書いておきます。

Zuishinさんの解答通り、<プロジェクト名>..csproj を作成し、再起動することで可能になりましたが、
それとは別にVSCodeが要求する.NET Frameworkがインストールされていないことも一因だったようです。本質問でいうFlow (9) のやつです。

ちなみにこの問題に直面する前から、.NET Framework 4.0 はプリインストール済みでした。

投稿2021/10/03 10:49

編集2021/10/03 10:59
BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問