我有几个 NuGet 包放在一起,其中一个是所有其他包引用的通用项目。
此公共项目将配置类插入App_Start
文件夹中,然后由 WebActivator 调用此类上的方法。
对于其他包之一,我希望在此方法中添加一行代码,但我正在努力找到一种方法来做到这一点。
我知道我可以非常简单地添加一个只包含这一行代码的额外类,但如果可能的话,我更喜欢使用 Install.ps1
powershell 脚本将代码行添加到现有的配置类中。
使用经过专业处理的 *.cs.pp 文件将覆盖现有文件(或添加新文件),并且 *.cs.transform 不适用于此类文件。
我知道类在哪里以及它叫什么,我知道这个方法叫什么,那么 Powershell 是否提供了一种在所述方法末尾添加一行的方法?
这是可能的,但不是微不足道的。您还必须非常小心,因为从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;")
此外,上面的代码不执行任何错误处理。