2

我有几个 NuGet 包放在一起,其中一个是所有其他人引用的公共项目。

这个公共项目将一个配置类插入到App_Start文件夹中,然后 WebActivator 调用这个类的一个方法。

对于其他软件包之一,我希望在此方法中再添加一行代码,但我正在努力寻找一种方法来做到这一点。

我知道我可以非常简单地添加一个仅包含这一行代码的附加类,但如果可能的话,我更喜欢使用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 回答