我有一些NuGet包,我把它们放在一起,其中一个是所有其他人引用的常见项目。
此公共项目将配置类插入App_Start
文件夹,然后WebActivator将调用此类的方法。
对于其他一个软件包,我希望为此方法添加一行代码,然后使用 install.ps1 (使用this SO post中的代码)实现此目的。
要成为一个勤奋的NuGet包开发人员,如果卸载了NuGet包,我应该删除这行代码。
为了做到这一点,我尝试使用FileCodeModel的FindPattern方法来查找代码行,但是没有幸运能让它运行起来。
这是我到目前为止所做的:
$app_start = $project.ProjectItems.Item("App_Start")
$item = $app_start.ProjectItems.Item("my-config-file.cs")
$namespace = $item.FileCodeModel.CodeElements | ? {$_.Kind -eq 5}
$class = $namespace.Members.Item("My-Config-Class")
$method = $class.Members.Item("My-Method-Name")
$startPoint = $method.GetStartPoint([EnvDTE.vsCMPart]::vsCMPartBody)
$startPoint = $startPoint.CreateEditPoint()
$endPoint = $method.GetEndpoint([EnvDTE.vsCMPart]::vsCMPartBody)
$endPoint = $endpoint.CreateEditPoint()
$startPoint.FindPattern("known-line-of-code", [EnvDTE.vsCMPart]::vsFindOptionsFromStart, ref $endPoint)
具体来说,最后一行FindPattern
,我遇到了麻烦。文档列出了另一个可选参数,并通过Visual Studio的异常消息判断...
异常调用" FindPattern"用" 3"参数:"类型不匹配。
...我想我应该提供这个参数。但是我提供什么呢?
即使我可以找到代码行,我该如何删除呢?
或FindPattern
是错误的继续进行方式?有没有其他方法可以删除已知的代码行?