是否可以更改通過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. 更新現有Nuget包中的文件
- 6. 如何通過CLI在ASP.NET Core項目中安裝nuget包
- 7. 從配置文件安裝Nuget包
- 8. NuGet軟件包安裝過程中是否可以修改VS項目文件?
- 9. 安裝NuGet包時出現問題Xamarin
- 10. 安裝VSIX的NuGet包裝
- 11. 如何通過yum安裝子包裝
- 12. 如何從特定來源安裝所有NuGet軟件包?
- 13. 如何在本地安裝NuGet包.nupkg文件?
- 14. 如何取消安裝Nuget包?
- 15. 如何爲Unity安裝Microsoft.Azure.Devices NuGet包?
- 16. 如何更新現有的CMS頁面通過安裝腳本
- 17. NuGET問題。如何在沒有Nuget的情況下安裝軟件包
- 18. 如何通過HTTP安裝gem文件?
- 19. 如何在安裝MSDeploy軟件包時保留現有文件?
- 20. 通過PowerShell腳本安裝的NuGet
- 21. 無法通過NUGET安裝NodeJS
- 22. 無法通過Nuget安裝Microsoft.Net.Http
- 23. 通過nuget安裝ReactiveUI的問題
- 24. 通過NuGet管理器安裝EntityFramework
- 25. DotNetOpenAuth NuGet包安裝失敗
- 26. 安裝NuGet包從Visual Studio
- 27. NuGet安裝FarseerPhysics.Portable包錯誤
- 28. 無法安裝NuGet包
- 29. NuGet安裝包錯誤
- 30. 無法安裝NuGet包
這並不完全是我的意思。我的意思是你可以通過安裝本身來更改文件嗎?例如,我聽說你可以在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