NuGet не обновляет ссылки dll в моем проекте
У меня есть следующая структура в моем 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.
1 ответ
Я нашел обходной путь в сценарии установки по следующей ссылке: 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);
}
}
}