簡體   English   中英

NuGet不會更新我項目中的dll引用

[英]NuGet doesn't update dll references in my project

我的nuspec具有以下結構:

<package>
  <metadata>
    <references>
      <reference file="A.dll"/>
    </references>
  </metadata>
  <files>
    <file src="A.dll" target="lib\net40\A.dll"/>
    <file src="B.dll" target="lib\net40\B.dll"/>
  </files>
</package>

我沒有在引用中包含B.dll ,因為它是用戶添加為引用的可選內容。

現在,當我執行Update-Package時,在將其添加為引用時,它會將路徑更新為A.dll ,但不會更新為B.dll

我如何才能將B.dll保留為可選的lib文件,但在更新NuGet軟件包時仍使其保持更新?

我正在使用Visual Studio 2013程序包管理器控制台。

我在以下鏈接的安裝腳本中找到了一種解決方法: http : //www.jaylee.org/post/2011/11/25/NuGet-package-customizations-and-optional-references.aspx

我不得不通過反復試驗進行一些修改,最后進行了更改:

# removed the + sign in *?\\ and removed the double trailing backslash
$newHintPath = $hintPath -replace "$packageId.*?\\", "$packageName\"

現在,最終腳本如下所示:

$packageName = $package.Id + '.' + $package.Version;
$packageId = $package.Id;

# Full assembly name is required
Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
$projectCollection = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection

# There is no indexer on ICollection<T> and we cannot call
# Enumerable.First<T> because Powershell does not support it easily and
# we do not want to end up MethodInfo.MakeGenericMethod.
$allProjects = $projectCollection.GetLoadedProjects($project.Object.Project.FullName).GetEnumerator(); 

Write-Host "Replace hint paths in project"
if($allProjects.MoveNext())
{
    foreach($item in $allProjects.Current.GetItems("Reference"))
    {
        $hintPath = $item.GetMetadataValue("HintPath")

        $newHintPath = $hintPath -replace "$packageId.*?\\", "$packageName\"

        if($hintPath -ne $newHintPath)
        {
            Write-Host "Updating $hintPath to $newHintPath"
            $item.SetMetadataValue("HintPath", $newHintPath);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM