NuGet:通过Powershell添加一行代码的可能性?

时间:2015-03-11 10:12:25

标签: powershell nuget nuget-package webactivator

我有一些NuGet包,我把它们放在一起,其中一个是所有其他人引用的常见项目。

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

对于其他一个软件包,我希望为此方法添加一行代码,但我很难找到一种方法来执行此操作。

我知道我可以非常简单地添加一个只包含这一行代码的附加类,但如果可能的话,我更喜欢使用Install.ps1 powershell脚本来添加代码行现有的配置类。

使用经过预处理的 * .cs.pp 文件将覆盖现有文件(或添加新文件), *。cs.transform 不会&#39 ; t在这样的文件上工作。

我知道班级在哪里以及它叫什么,我知道这个方法叫什么,Powershell是否提供了在所述方法的末尾添加一行的方法?

1 个答案:

答案 0 :(得分: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;")

此外,上述代码不会进行任何错误处理。