2015-07-02 10 views
0

У меня есть проект библиотеки, используемый в нескольких приложениях. Назовем эту библиотеку1. Библиотека1 имеет свои собственные зависимости пакета пакета NuGet. Когда я настраиваю проект, ProjectA, используя Library1, он указывает HintPath для каждого .dll, от которого зависит библиотека1. Скажем, это HintPath было «.. \ etc.dll».Проект библиотеки C#, используемый в нескольких проектах

У меня теперь есть библиотека2, которая зависит от Library1 и ProjectB, которая зависит от Library2 (и Library1). У меня есть иерархия, как это:

ProjectB 
--Library2 
----Library1 

Но другой проект использует Library1 непосредственно, например, так:

ProjectA 
--Library1 

При открытии либо ProjectB, пакеты Решаются в «ProjectB \ пакеты», которые это две папки из библиотеки в зависимости от нее, то есть она должна выглядеть в «.... \ etcdll», а не в «.. \ etcdll», указанном в HintPath.

Есть ли способ указать HintPath в зависимости от родительского проекта или какой-либо обходной путь, который позволит работать без меня, чтобы вручную изменить каждый из путей ссылки .dll? Возможно, файл, который я мог бы добавить в родительский проект?

+0

В моей точке зрения, я только различаю всю внешнюю библиотеку в одной папке «lib» для проекта. Возможно, я не пытаюсь воссоздать зависимость связанных библиотек. Например, ProjectA имеет ссылку «Library1.dll» в папке «lib», а ProjectB ссылается на «Library2.dll», но также имеет «Library1.dll» в папке «lib» для зависимости. – Zeal

+0

@Zeal Моя «Библиотека2» и «Библиотека1» являются подмодулями git. Это проекты, и, хотя я мог бы использовать .dll, нам нужно будет часто их обновлять. – snotyak

ответ

1

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

<configuration> 
    <config> 
    <add key="repositorypath" value="Packages" /> 
    </config> 
</configuration> 

РепозиторийPath относится к каталогу файла NuGet.Config.

NuGet будет искать этот файл на основе открытого вами решения, поэтому вам нужно будет разместить его так, чтобы одно или все ваши решения использовали этот файл. Простым способом является поместить его в каталог, который является родителем обоих решений, но вы можете добавить его для каждого решения или только одного.

Если решение находится в каталоге c: \ a \ b \ c, то NuGet будет искать файл в этих местах в указанном порядке и, наконец, вернуться к тому, который находится в вашем профиле пользователя.

  1. C: \ A \ B \ c.nuget \ nuget.config
  2. C: \ A \ B \ C \ nuget.config
  3. C: \ A \ B \ nuget.config
  4. с: \ а \ nuget.config
  5. C: \ nuget.config

После настройки этих вам, возможно, придется переустановить пакеты NuGet так правильные hintPaths добавлены к вашему проекту.

+0

Хотя это работает для родительского проекта (где находится .sln), зависимостей проекта внутренней библиотеки не будут создавать свои собственные папки «Пакеты» с помощью этого nuget.config. То, что я ищу, - это способ использовать мои проекты библиотек в разных проектах с разными структурами и по-прежнему правильно работать с их ссылками на пакеты.В идеале я бы мог установить отдельное место для библиотеки .csproj в этой библиотеке и загрузить ее пакеты, чтобы hintpath работал независимо от используемого проекта. Имеет ли это смысл? – snotyak

+0

У вас не может быть каталога отдельных пакетов для каждого проекта. Каталог пакетов NuGet основан на каталоге решения. Если вы не перейдете к новым проектам стиля .xproj и project.json, которые вообще не сохраняют пути поиска, но поддерживаются только в Visual Studio. Чтобы сохранить исходные подсказки, вам нужно будет иметь какой-либо инструмент или скрипт, который правильно восстанавливает пакеты для каждого проекта, который имеет свой собственный каталог уникальных пакетов, и вам также нужно будет только обновлять пакеты NuGet для проекта в правильном родительском решении. –

+0

Это имеет смысл. Есть ли способ сделать это, чтобы все проекты использовали папку в домашнем каталоге пользователя, а не относили ее к общему? Я не мог заставить переменные среды работать в файле nuget.config. – snotyak