powershell - NuGet:可以通过 Powershell 添加一行代码吗?

标签 powershell nuget nuget-package webactivator

我将一些 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/

相关文章:

entity-framework - 在解决方案中添加现有项目 - 导致引用命名空间错误

c# - Nuget 似乎安装了错误版本的 System.Collections.Immutable

visual-studio - NuGet 还原无法看到未安装包

AjaxControlToolkit v7.1213 依赖增加

regex - 如何仅删除数字之间的空格?

Powershell getfiles.count() 排除thumbs.db

powershell - 如何开始我刚刚定义的功能的工作?

powershell - PowerShell中的多个参数集

c# - 是否可以在一个解决方案中拥有多个 NuGet 配置?

visual-studio-2010 - 是否可以根据构建架构将 Nuget 绑定(bind)到两个不同的包