0

ここの手順に従おうとしています: https://msdn.microsoft.com/en-us/library/cc512961.aspxで、Visual Studio でサポートを追加したいカスタム DSL 用の新しいプロジェクト システムを作成します (最終的にはこれには多くの機能が含まれますが、今は非常に基本的なものを機能させようとしています)。

私は彼らの例を機能させることができますが、「AssemblyInfo.cs」ファイルを「Properties」フォルダーに入れるという非常に単純な変更を行うのに苦労しています。

私のテンプレートは次のようになります。

  • テンプレート
    • AssemblyInfo.cs
    • Program.cs
    • Template.myproj
    • Template.vstemplate

そして、作成したプロジェクトの構造を次のようにします。

  • テンプレート
    • プロパティ
      • AssemblyInfo.cs
    • Program.cs
    • Template.myproj
    • Template.vstemplate

したがって、.myproj ファイルを次のように変更しました。

<ItemGroup>
  <Compile Include="Properties\AssemblyInfo.cs" />
  <Compile Include="Program.cs" />
</ItemGroup>

および読み取る .vstemplate ファイル:

<TemplateContent>
  <Project File="Template.myproj" ReplaceParameters="true">
    <ProjectItem ReplaceParameters="true" TargetFileName="Properties\AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
    <ProjectItem ReplaceParameters="true" OpenInEditor="true">Program.cs</ProjectItem>
  </Project>
</TemplateContent>

これは非常に単純です。「Properties\」を 2 か所に追加しただけです。

ただし、新しいプロジェクトを作成すると、私の実験的な VS インスタンスは不平を言います:

Collection was modified; enumeration operation may not execute.

言うまでもなく、私が書いたコードにはいかなる種類の列挙も含まれていません...「MPFProj」コードをステップ実行しようとしましたが、ステップ実行されているコードとは関係のないランダムな場所でエラーが発生しているようですただし(おそらくエラーは別のスレッドで発生しますか?)。

奇妙なことに、フォルダーがなくても、新しいプロジェクトを作成してから (IDE のように) 手動でフォルダーを作成し、新しいファイルを (「新しいアイテム」テンプレートを使用して) フォルダーに追加できるようです。そのフォルダは問題ありません。

これは MPFProj のバグですか? これを処理するには、MPFProj 型のドキュメント化されていない 100,000 の仮想メソッドの 1 つをオーバーライドする必要がありますか? vstemplate ファイルが正しくありませんか?

また、VS 2015 の Visual Studio 拡張性に関する適切なソースはありますか? または、これらの実装方法のベスト プラクティスはありますか? または意味のあるドキュメントですか?私はいくつかの例 (たとえば、IronPython VS プラグイン) を見てきましたが、特にこのような微妙な問題を解決するために、特に啓発的ではありません (そして、適切なドキュメントがなければ、異なる例の違いが存在する理由を伝えることは不可能です... )。

4

0 に答える 0