2015-09-26 145 views
1

我試圖通過PowerShell在csproj中編輯當前安裝的NuGet包庫的<Reference> XML節點,以添加Condition="..."屬性。NuGet安裝後運行PowerShell腳本

我能夠在包安裝期間調用PowerShell Install.ps1腳本,但<Reference>節點在那時不存在。

如果我手動將所需的Condition="..."屬性添加到csproj,它將在更新NuGet包時被刪除。

有沒有辦法在之後自動運行PowerShell腳本NuGet添加已安裝庫的<Reference>節點?或者以某種方式修改NuGet在安裝軟件包時添加的節點?

+1

NuGet將停止在未來的版本中支持PowerShell。 –

回答

1

一個選項是沒有NuGet默認添加引用。刪除你的lib文件夾並將程序集中的其他地方放在包中(參考?)。創建一個{NuGetPkgName} .targets文件並將其放入包build文件夾中。該目標文件將被「導入」到您添加NuGet pkg的任何項目中。然後在您的目標文件中,您可以使用所需的條件屬性將引用添加到您的程序集。

0

我還沒有時間去實施Keith Hill的解決方案,只好通過批處理文件手動調用我的腳本。這是PowerShell腳本,以幫助某人。

目標是在從MyProjectName開始的所有項目中的Debug中排除對MyPackageName的引用。

# Get a list of matching csproj files recursively 
$csprojs = gci $PSScriptRoot -rec -include MyProjectName.*.csproj 

# The value of the condition attribute we want to set 
$condition = @' 
'$(Configuration)' != 'Debug' 
'@ 

foreach ($csproj in $csprojs) 
{ 
    [xml]$xml = Get-Content $csproj; 
    foreach ($reference in $xml.Project.ItemGroup.Reference | ? { $_.Include -match '^MyPackageName' }) 
    { 
     $reference.SetAttribute('Condition', $condition); 
    } 

    $xml.Save($csproj); 
}