NuGet:是否可以通过 Powershell 添加一行代码?
NuGet: Possibility of adding a line of code via Powershell?
我有几个我放在一起的 NuGet 包,其中一个是所有其他人引用的公共项目。
这个普通项目在App_Start
文件夹中插入一个配置class,然后WebActivator调用这个class上的一个方法。
对于其他包之一,我希望在此方法中再添加一行代码,但我正在努力寻找一种方法来执行此操作。
我知道我可以非常简单地添加一个额外的 class,它只包含这一行代码,但如果可能的话,我更愿意使用 Install.ps1
powershell 脚本来添加现有配置的代码行 class.
使用经过预处理的 *.cs.pp 文件将覆盖现有文件(或添加新文件),并且 *.cs.transform 不适用于这样的文件。
我知道 class 在哪里,它叫什么,我知道这个方法叫什么,那么 Powershell 是否提供了在所述方法末尾添加一行的方法?
这是可能的,但并非易事。您还必须非常小心,因为从 NuGet 包中删除某人的代码不会让他们很高兴。
安装 NuGet 包时,您可以访问 Visual Studio 对象模型 (EnvDTE)。 $project 变量可用于访问您需要的特定项目项。从那里你可以使用 FileCodeModel 代表文件中的代码。然后您需要找到 class 及其方法。然后创建一个编辑点并插入文本。
下面会找到一个叫Class1的class,在它的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;")
另外上面的代码没有做任何错误处理。
我有几个我放在一起的 NuGet 包,其中一个是所有其他人引用的公共项目。
这个普通项目在App_Start
文件夹中插入一个配置class,然后WebActivator调用这个class上的一个方法。
对于其他包之一,我希望在此方法中再添加一行代码,但我正在努力寻找一种方法来执行此操作。
我知道我可以非常简单地添加一个额外的 class,它只包含这一行代码,但如果可能的话,我更愿意使用 Install.ps1
powershell 脚本来添加现有配置的代码行 class.
使用经过预处理的 *.cs.pp 文件将覆盖现有文件(或添加新文件),并且 *.cs.transform 不适用于这样的文件。
我知道 class 在哪里,它叫什么,我知道这个方法叫什么,那么 Powershell 是否提供了在所述方法末尾添加一行的方法?
这是可能的,但并非易事。您还必须非常小心,因为从 NuGet 包中删除某人的代码不会让他们很高兴。
安装 NuGet 包时,您可以访问 Visual Studio 对象模型 (EnvDTE)。 $project 变量可用于访问您需要的特定项目项。从那里你可以使用 FileCodeModel 代表文件中的代码。然后您需要找到 class 及其方法。然后创建一个编辑点并插入文本。
下面会找到一个叫Class1的class,在它的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;")
另外上面的代码没有做任何错误处理。