我将一些 NuGet 包放在一起,其中一个是所有其他项目都引用的通用项目。
这个公共(public)项目将一个配置类插入到 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;")
此外,上面的代码没有做任何错误处理。
关于powershell - NuGet:可以通过 Powershell 添加一行代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28983749/