2

まとめた NuGet パッケージがいくつかあります。そのうちの 1 つは、他のすべてのパッケージから参照される共通のプロジェクトです。

この共通プロジェクトは構成クラスをフォルダーに挿入し、App_Startこのクラスのメソッドが WebActivator によって呼び出されます。

他のパッケージの 1 つで、このメソッドにもう 1 行コードを追加したいのですが、これを行う方法を見つけるのに苦労しています。

この 1 行のコードだけを含む追加のクラスを非常に簡単に追加できることはわかっていますが、可能であれば、Install.ps1powershell スクリプトを使用してコード行を既存の構成クラスに追加することをお勧めします。

プロ処理された*.cs.ppファイルを使用すると、既存のファイルが上書きされ (または新しいファイルが追加され)、*.cs.transformはそのようなファイルでは機能しません。

クラスがどこにあり、それが何と呼ばれているか、そしてメソッドが何と呼ばれているかを知っているので、Powershell はそのメソッドの最後に行を追加する手段を提供しますか?

4

1 に答える 1

2

これは可能ですが、簡単なことではありません。また、NuGet パッケージから誰かのコードを削除しても満足してもらえないので、細心の注意を払う必要があります。

NuGet パッケージをインストールすると、Visual Studio オブジェクト モデル (EnvDTE) にアクセスできます。$project 変数を使用して、必要な特定のプロジェクト アイテムにアクセスできます。そこから、ファイル内のコードを表すFileCodeModelを使用できます。次に、クラスとそのメソッドを見つける必要があります。次に、編集点を作成し、テキストを挿入します。

次の例では、Class1 というクラスを検索し、コード行をその Foo メソッドに挿入します。挿入されたコード行は正しくインデントされないことに注意してください。ドキュメントを見てそれを見つける必要があります。

$project.ProjectItems.Item("Class1.cs")
$namespace = $item.FileCodeModel.CodeElements | ? {$_.Kind -eq 5}
$namespace.Members.Item("Class1")
$method = $class.Members.Item("Foo")
$endPoint = $method.GetEndpoint([EnvDTE.vsCMPart]::vsCMPartBody)
$editPoint = $endpoint.CreateEditPoint()
$editPoint.Insert("int a = 0;")

また、上記のコードはエラー処理を行いません。

于 2015-03-11T16:33:17.987 に答える