Visual Studio 拡張機能作成

Visual Studio のメニューバーにオリジナルのメニューを追加する
https://docs.microsoft.com/en-us/visualstudio/extensibility/adding-a-menu-to-the-visual-studio-menu-bar?view=vs-2015

Visual Studio 拡張機能から Visual Studio プロジェクトを弄ってみる
https://qiita.com/tafuji/items/fd36c373f770d1ef4707

Get active project – Extending Visual Studio 
https://blog.mastykarz.nl/active-project-extending-visual-studio-sharepoint-development-tools-tip-1/

Visual Studio 2017 Extension development tutorial
https://michaelscodingspot.com/2017/10/08/visual-studio-2017-extension-development-tutorial-part-1/

Visual Studio Text Editor Extension
https://stackoverflow.com/questions/6751086/visual-studio-text-editor-extension

The Text Model
https://docs.microsoft.com/en-us/visualstudio/extensibility/inside-the-editor?view=vs-2015#textmodel

Creating a Visual Studio Extension
https://www.fmtconsultants.com/creating-a-visual-studio-extension-part-2-of-2/

Get file path from Visual Studio editor
https://stackoverflow.com/questions/4565866/get-file-path-from-visual-studio-editor

Project.Name Property
https://docs.microsoft.com/en-us/dotnet/api/envdte.project.name?view=visualstudiosdk-2017

Visual Studio プラグイン作成時に、参考になったサイトです。
貴重な情報に感謝です。

Visual Studio の拡張機能

Visual Studio Experimental Instance が起動しなくなった時に下記のサイトが参考になりました。
http://baba-s.hatenablog.com/entry/2017/12/07/102243

「Reset the Visual Studio 20xx Experimental Instance 」
スタートメニューからリセットが出来るみたいです。

Active Project の取得

  • dte.ActiveSolutionProjects
  • dte.Solution.SolutionBuild.StartupProjects
  • dte.Solution.Projects

ソリューションとプロジェクトに含まれているファイルの取得。

Array projects = dte.ActiveSolutionProjects as Array;
if (projects == null || projects.Length <= 0)
{
    return;
}

ソリューションを読み込み、プロジェクトがある状態でも「ActiveSolutionProjects」が正しく取得できない事がある。

Visual Studio 2015 で Direct3D11 Sample ビルド時の LNK2019

dxerr.lib(dxerrw.obj) : error LNK2019: unresolved external symbol _vsnwprintf referenced in function “long __cdecl StringVPrintfWorkerW(unsigned short *,unsigned __int64,unsigned __int64 *,unsigned short const *,char *)” (?StringVPrintfWorkerW@@YAJPEAG_KPEA_KPEBGPEAD@Z)

Visual Studio 2015 以降で、DirectX Sample ビルド時に上記の LNK2019 エラーが発生した場合は、プロジェクトのリンカーの設定に「legacy_stdio_definitions.lib」を追加する必要があります。

https://social.msdn.microsoft.com/Forums/en-US/5150eeec-4427-440f-ab19-aecb26113d31/updated-to-vs-2015-and-now-get-unresolved-external-errors?forum=vcgeneral

このリンクエラーは Visual Studio 2015 から printf 系の関数の実装が inline 展開されるようになったのが原因で発生しているみたいです。関数が inline 展開されるため、呼び出し側はコンパイル時に命令列に置き換わることになるので、関数の呼び出し先そのものが存在しなくなります。(今回であれば printf 関数のアドレスが無くなります)

プロジェクトのソースコードに書かれている printf は、コンパイル時に命令列に展開されるので問題は起こらないのですが、既にコンパイル済の (古いソースコードの) lib は printf の関数のアドレスが未だにどこかに定義されていると信じてリンク時に探しに行くのですが、該当の関数は inline 展開されているため見つけることができずにエラーになります。

legacy_stdio_definitions.lib をリンクすることで、この lib の中に古い (legacyな)  printf の実態を持つバイナリが含まれているため、これにリンクできるのでビルドが通るようになります。

もしリンクエラーを起こしている lib のソースコードが手元にある場合は、Visual Studio 2015 で一度 lib を作り直した方が良いのですが、無い場合は上記の legacy lib をリンクしてしまうのが一番早い解決のようです。

https://msdn.microsoft.com/en-us/library/bb531344.aspx