2016-08-02 2 views
0

Во время автоматической сборки мой пакет nuget должен быть не зависимым от фреймворка, однако я продолжаю обнаруживать, что добавленный пакет nuget неправильно добавляет HintPath.Пакет NuGet добавляет неправильный путь подсказки

В моей nuspec я определил файлы, которые являются частью пакета:

<files> 
    <file src="lib\xyz.dll" target="lib\xyz.dll" /> 
    <file src="lib\xyz.xml" target="lib\xyz.xml" /> 
</files> 

Однако всякий раз, когда я добавить пакет в мой проект/решение, это неправильно добавляет путь подсказку с указанием:

<Reference Include="xyz, Version=11.0.0.0, Culture=neutral, PublicKeyToken=4a3c0a4c668b48b4"> 
    <HintPath>..\packages\xyz.11.0.0.0\xyz.dll</HintPath> 
    <Private>True</Private> 
</Reference> 

Это приводит к тому, что сервер автоматической сборки не находит сборку и не может ее построить. Я могу вручную исправить подсказку, но скорее не буду.

Я взглянул на это сообщение (Failed to add NuGet package), но я не считаю это актуальным. Этот пост (NuGet package install uses specific assembly version in csproj files), казалось, имел в виду ту же проблему, но без ответа. У кого-нибудь есть мысли?

ответ

1

Вы можете обойти это с помощью пользовательской задачи MSBuild.

Вместо добавления сборки в каталог lib создайте файл MSBuild .targets с именем после идентификатора пакета и поместите свою сборку xyz рядом с ней.

\build 
    \Net45 
     \MyPackage.targets 
     \xyz.dll 
     \xyz.xml 

Затем в файле MSBuild .targets добавьте ссылку именно так, как вы хотите. Что-то вроде:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
    <Reference Include="xyz"> 
     <HintPath>$(MSBuildThisFileDirectory)\xyz.dll</HintPath> 
    </Reference> 
    </ItemGroup> 
</Project> 

Приведенные выше показывает, как определить намек путь относительно MsBuild .targets файла. Вы сказали, что хотите использовать подсказку, чтобы удалить ее, если xyz.dll можно каким-то образом разрешить MSBuild, например, в GAC.

+0

Отлично, позвольте мне попробовать, и я думаю, что это будет победитель –

+0

Я помещаю файл целей в пакет NuGet? Или я помещаю его в проект потребления? –

+0

Поместите его в пакет NuGet в каталоге сборки. Затем он будет добавлен в проект, когда будет установлен пакет NuGet. Существуют существующие пакеты NuGet, которые используют пользовательские целевые объекты MSBuild, такие как Xamarin.Forms и Microsoft.Bcl.Build. Единственное, что улавливает людей, это то, что файл .targets должен иметь то же имя, что и идентификатор пакета. –

Смежные вопросы