ITエンジニア向け 情報館  
   

 

Visual Studio

「文字リテラルに文字が多すぎます」のビルドエラー

ソースコードをビルドしたときに、「文字リテラルに文字が多すぎます」というエラーメッセージが出た場合の対処法です。

文字型変数に、あきらかに誤った文字情報を入れているのでなければ、該当ソースコードの文字コードがSJISになってしまっていることがエラーの原因です。

メニューバーの、
  ファイル > 保存オプションの詳細設定
のメニューで、ソースコードの文字コードをUTF-8にして保存し直し、再度ビルドすれば、エラーメッセージは解消されます。

プロジェクト参照の参照先クラスを読み込めない

参照設定で他のプロジェクトを参照し、参照先プロジェクトに含まれるクラスを呼び出せない場合の対処法。

一度VisualStudioを終了後、そのプロジェクトのソリューションフォルダにある objフォルダ と binフォルダ を全て削除。

再度VisualStudioを起動して、ソリューションをリビルドする。
すると参照先プロジェクトに含まれるクラスを、呼び出して使用することができる。

SQLServerに対してデータベース比較ツールが使えない場合の対処法

Visual Studioのバージョン

VisualStudioには、データベース比較ツールが付属しています。
このツールを使うと、2つのデータベースの定義を比較して、テーブル定義・列定義が一致しているかどうかを調べることができます。

SQLServerのデータベースに対して比較をしようとした時、エラーが出て比較をすることができませんでした。
調べたところ、VisualStudioをアップデートすれば解消されました。
VisualStudioよりSQLServerのバージョンの方が高い場合に、このような症状が発生することがあります。

権限

スキーマ比較を実行するユーザーに対して、VIEW DEFINITIONという権限が必要。Management Studioから以下のコマンドで、権限を付与できる。

GRANT VIEW DEFINITION TO [DBのユーザー名]

スキーマとしてdb_ownerを指定すれば、比較ツールを実行できる。
db_datareaderとdb_datawriterのみにするなど権限を絞った場合に、十分な権限を持てていない場合があり、追加の権限付与が必要となる場合がある。

スタックトレースに行番号が表示されない場合の対処法

例外発生時に、スタックトレースに行番号が書かれていると、ソースコード中のどの箇所でエラーが発生したのかを迅速に把握でき、プログラムの改修をピンポイントで行えるようになります。
スタックトレースに行番号が表示されない場合は、次の原因が考えられます。

拡張子pdbファイルがない

実行環境に、pdbファイルを配置し忘れたなどの理由が考えられます。
pdbファイルを実行環境に配置すれば、行番号が表示されるはずです。

pdbファイルの対応付けが誤っている

pdbファイルはあるが、異なるビルドタイミングで生成した拡張子dllやexeのファイルと併存していることが考えられます。例えば、dllファイルは更新したが、pdbファイルを更新せず古いままだった、などが考えられます。
同じビルドタイミングで生成されたdllファイルとpdbファイルを、実行環境に配置すれば、行番号が表示されるはずです。

VisualStudioの設定

VisualStudioでのビルドの設定により、pdbファイルが生成されない設定になっていることが考えられます。
VisualStudioのプロジェクトのプロパティを開き、
設定項目:ビルド>詳細設定(D)>デバッグ情報
設定値:fullまたはpdb-only
と設定すれば、pdbファイルが生成されるようになります。

補足

本番稼働環境にはpdbファイルを置くな、という意見も多くあります。
ただ、本番環境で万が一不具合が発生した時に、的確に最速でバグを回収して本番環境を再更新が必要とされる要件がある場合には、pdbファイルを置いておくのも一考に値します。

単体テストが実行できない(全てスキップされる)

Visual Studioの単体テスト(MSTest)を利用したら、全てのテストがスキップされる現象が発生しました。
Visual Studioをバージョンアップさせた後に、この症状が出ました。
MSTestで単体テストを行ったときに、次のようなエラーメッセージも表示されました。
(「出力」ウインドウで、ドロップダウンを「テスト」に切り替えたところに表示されていました)

同じ拡張子で複数のバージョンが見つかりました。最新のバージョンを選択しています。
Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter : 14.0.4908.2
TestSettings will soon be deprecated for automated unit and functional testing scenarios. It is recommended that you use RunSettings. To learn more, see http://aka.ms/runsettings

アセンブリ 'Microsoft.VisualStudio.QualityTools.LoadTest, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' が見つかりません。

警告: testsettings ファイル、vsmdi ファイルは MSTest V2 アダプターではサポートされていません。

この事象は、次のことを行うと解消されました。

  • ソリューション内の「〜.testsettings」という拡張子のファイルを削除した。これは、VisualStudio2010時代に使われていたものらしい?
  • ソリューションフォルダ内にある「.vs」フォルダに存在する、テスト関連の設定情報を削除した

ユニットテストでアセンブリのファイルロック

VisualStudioでユニットテスト実行後、ビルドのたびに次のようなビルドエラーが発生しました。

"obj\Debug\〜〜\XXX.dll"を、"bin\Debug\〜〜\XXX.dll"にコピーできませんでした。10回の再試行回数を超えたため、失敗しました。このファイルは、"dotnet.exe" によってロックされています。

"obj\Debug\〜〜\XXX.dll"を、"bin\Debug\〜〜\XXX.dll"にコピーできません。別のプロセスで使用されているため、プロセスはファイル "〜〜\XXX.dll" にアクセスできません。

このエラーが発生すると、以後、ビルドのたびに必ず上記ビルドエラーが発生し、デバッグ実行やユニットテストを実行できなくなります。
マシンを再起動すれば再度ビルドを実行できるようになりますが、結局上記のビルドエラーが発生し、また再起動しなければならなくなります。

このエラーの原因は、ユニットテストの実行中に無限ループとなるロジックが存在していたことでした。
無限ループとなるロジックを解消すれば、上記ビルドエラーは発生しなくなりました。

Visual Studioのメモリ使用量を減らす

https://takap-tech.com/entry/2023/03/28/010527