[英]Managing Package Manager Console commands for Entity Framework in project
在處理具有“非標准”構建的解決方案時,在包管理器控制台中輸入的實體框架命令(如Add-Migration
和Update-Database
可能會變得相當長且復雜。
使用語法和選項,如:
Add-Migration [-Name] <String> [-Force] [-ProjectName <String>] [-StartUpProjectName <String>]
[-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [-IgnoreChanges]
[-AppDomainBaseDirectory <String>] [<CommonParameters>]
Add-Migration [-Name] <String> [-Force] [-ProjectName <String>] [-StartUpProjectName <String>]
[-ConfigurationTypeName <String>] -ConnectionString <String> -ConnectionProviderName <String>
[-IgnoreChanges] [-AppDomainBaseDirectory <String>] [<CommonParameters>]
Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force]
[-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>]
[-ConnectionStringName <String>] [-AppDomainBaseDirectory <String>] [<CommonParameters>]
Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force]
[-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>]
-ConnectionString <String> -ConnectionProviderName <String>
[-AppDomainBaseDirectory <String>] [<CommonParameters>]
在項目中管理這些命令有什么好的選擇嗎? 我經常發現自己創建一個帶有注釋和保存命令行的.txt文件,並將其保存在解決方案級別的“doc”文件夾中。 我根據需要從這里復制並粘貼命令,但似乎應該有更好的方法來處理這些命令。
理想情況下,我希望能夠為Package Manager控制台創建一個“批處理文件”(或類似的東西),它可以采用簡化的選項並將其擴展為完整的命令。 例如,我運行Add-Migration-Ex MyNewMigration
,它將擴展為完整的Add-Migration
命令,並應用當前項目的所有其他標准選項和開關。
有沒有更簡單的方法來管理這些類型的復雜命令,使它們更容易保存並在每個項目/解決方案級別上運行?
經過大量的研究,我發現NuGet有一個系統可以在解決方案負載下運行power-shell腳本。 Nuget將在包的“tools”目錄中查找名為“init.ps1”的腳本,並在解決方案加載時執行它。 我將利用它,並創建一個在解決方案加載時運行的NuGet包,它將檢查名為“SolutionCommands”的解決方案中的目錄。 然后它將運行任何腳本,並安裝位於該目錄中的任何模塊。 這些腳本可以作為Visual Studio中解決方案的一部分進行管理,通過版本控制遵循解決方案,並自動分發給團隊中的所有開發人員。
我已經為Nuget創建了初步包 ,現在可以為任何想要這個功能的人提供。 它還沒有真正測試過,腳本需要在它們運行之前簽名(或者計算機的安全策略放松)。
$oldLocation = Get-Location
$oldWarningPref = $WarningPreference
$WarningPreference = 'SilentlyContinue'
$commandDirectory = ".\SolutionCommands"
If(Test-Path $commandDirectory)
{
Write-Host "Installing Modules..."
Get-ChildItem $commandDirectory -Filter "*.psm1" |
ForEach-Object {
$fullPath = Join-Path -Path $commandDirectory -ChildPath $_.Name
$fileName = Split-Path -Path $fullPath -Leaf
$fileNameNoExtension = [System.IO.Path]::GetFileNameWithoutExtension($fullPath)
if (Get-Module | ?{ $_.Name -eq $fileNameNoExtension })
{
Remove-Module $fileNameNoExtension
}
Import-Module ($fullPath)
Write-Host "Loaded module: " $fullPath
Write-Host " Commands: " (Get-Command -Module $fileNameNoExtension)
Write-Host
}
Write-Host "Executing Scripts..."
Get-ChildItem $commandDirectory -Filter "*.ps1" |
ForEach-Object {
$fullPath = Join-Path -Path $commandDirectory -ChildPath $_.Name
Write-Host $fullPath
. $fullPath
}
}
Set-Location $oldLocation
$WarningPref = $oldWarningPref
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.