是否可以更改通过NuGet包存在的文件的内容?意思是,假设你制作一个全新的MVC3网站。你想安装一个NuGet包来更新主页。也许可以更改欢迎消息,然后更改布局以包含您创建的一些新视图,并更新主控制器以包含返回新视图的方法。这将如何完成?如何通过NuGet包安装更改现有文件?
回答
安装完NuGet包后,您可以手动修改任何您想要的文件。只需在VS中编辑它们(或使用其他编辑器)。 NuGet软件包的唯一区别是,如果您在原始软件包文件和文件之间检测到更改时卸载/更新软件包,则不会删除您的已修改文件。这里会提到这是日志。
更新:
的NuGet已通过.transform and .pp files一个软件包安装期间修改项目文件的支持。但是这具有局限性,.transform文件将内容添加到配置文件(它们不能编辑),而.pp文件用于新的源代码文件。
您可以使用PowerShell中的EnvDte CodeModel(即install.ps1)修改现有源代码。虽然这有点复杂。
如果您在NuGet包资源管理器中打开JQuery NuGet包(或只是解压缩包)并查看install.ps1和common.ps1,则可以看到一个示例,它们会自动将一行添加到_references.js对于JQuery,以便JQuery API将显示在IntelliSense中。
但是,这是一个相当复杂的过程来自动更新代码(尤其是人们可以编辑的代码)。 JQuery示例涉及使用正则表达式在更新之前查找现有引用,并且所有这些操作都是向已知位置中的特定文件添加/更新单行注释(并且它不应该破坏构建出错了,因为它只是一个评论)。
我很想看到更多的例子,甚至是像OP的请求一样的辅助函数库。
下面是common.ps1一个功能:
function AddOrUpdate-Reference($scriptsFolderProjectItem, $fileNamePattern, $newFileName) {
try {
$referencesFileProjectItem = $scriptsFolderProjectItem.ProjectItems.Item("_references.js")
}
catch {
# _references.js file not found
return
}
if ($referencesFileProjectItem -eq $null) {
# _references.js file not found
return
}
$referencesFilePath = $referencesFileProjectItem.FileNames(1)
$referencesTempFilePath = Join-Path $env:TEMP "_references.tmp.js"
if ((Select-String $referencesFilePath -pattern $fileNamePattern).Length -eq 0) {
# File has no existing matching reference line
# Add the full reference line to the beginning of the file
"/// <reference path=""$newFileName"" />" | Add-Content $referencesTempFilePath -Encoding UTF8
Get-Content $referencesFilePath | Add-Content $referencesTempFilePath
}
else {
# Loop through file and replace old file name with new file name
Get-Content $referencesFilePath | ForEach-Object { $_ -replace $fileNamePattern, $newFileName } > $referencesTempFilePath
}
# Copy over the new _references.js file
Copy-Item $referencesTempFilePath $referencesFilePath -Force
Remove-Item $referencesTempFilePath -Force
}
谢谢!一个非常“你好,世界!” - 一个例子来开展这种任务。 – vbullinger 2014-03-24 14:18:42
- 1. 通过NuGet包更改Global.asax?
- 2. 如何手动更新通过NuGet包安装的jQuery UI?
- 3. 如何通过NuGet安装旧版本的软件包?
- 4. 更新现有Nuget包中的文件
- 5. 如何通过CLI在ASP.NET Core项目中安装nuget包
- 6. 从配置文件安装Nuget包
- 7. 如何通过yum安装子包装
- 8. 如何在本地安装NuGet包.nupkg文件?
- 9. 如何取消安装Nuget包?
- 10. 如何为Unity安装Microsoft.Azure.Devices NuGet包?
- 11. NuGET问题。如何在没有Nuget的情况下安装软件包
- 12. 如何在安装MSDeploy软件包时保留现有文件?
- 13. 无法通过NUGET安装NodeJS
- 14. 通过NuGet管理器安装EntityFramework
- 15. NuGet包安装失败
- 16. PowerShell脚本安装nuget包
- 17. NuGet安装FarseerPhysics.Portable包错误
- 18. Nuget包安装失败
- 19. 安装NuGet包编程
- 20. NuGet包无法安装
- 21. 安装NuGet包从Visual Studio
- 22. 从私人订阅源通过命令行安装NuGet包
- 23. 安装Nuget软件包解决方案
- 24. 如何通过pip安装twilio包?
- 25. 如何通过pip安装包?
- 26. 通过Ubuntu软件安装软件包
- 27. NuGet如何使包装没有“Bin”文件夹
- 28. 如何通过msi安装更新特定文件
- 29. 如何更换通过Macports安装的二进制文件?
- 30. 如何通过nuget命令安装SQLite实体框架1.0.99.0
这并不完全是我的意思。我的意思是你可以通过安装本身来更改文件吗?例如,我听说你可以在NuGet包中更改web.config。像,一些指令或脚本等?我想你可以通过脚本来改变任何文件,但是有没有一些典型的方法来做到这一点?所以当你安装一个软件包时,你会添加一些新文件,但是你的一些现有文件会被修改。例如,可能会更改default.aspx的内容。让我的意思呢? – vbullinger 2012-04-17 21:46:44
现在明白了,我更新了上面的答案。简而言之,nuget已经支持.pp/.transform文件中的常见简单场景。 NuGet不支持修改现有代码,并通过PowerShell脚本完成。我会看看CodeModel,但我找不到一个简单的例子。 – 2012-04-18 18:20:36
我看到了关于有文件的东西 - 我认为pp - 你会留下变量而不是命名空间等东西,它会从项目文件等中获取它,但是Entity Framework包如何添加web.config节点?它是否与脚本? – vbullinger 2012-04-19 23:15:55