2012-12-03 12 views
10

Buduję pakiet NuGet, który odwołuje się do zestawu Microsoft CommonServiceLocator.Jak określić zależności warunkowe w oparciu o strukturę docelową w NuGet?

Istnieją dwie wersje Microsoft CommonServiceLocator tam:

Mój projekt to przenośna biblioteka klas, ale ponieważ jest ona czasami używana z biblioteką korporacyjną, muszę "warunkowo" odwoływać się do wersji przenośnej, aby uniknąć konfliktu.

  • Jeśli celem jest pełne ramy .NET 4.0/4.5, użyj oryginalnego opakowania CommonServiceLocator więc ludzie mogą również korzystać bity Enterprise Library (który także Odwołanie pakiet CommonServiceLocator).
  • Jeśli szkielet docelowy jest przenośny (lub cokolwiek innego), użyj pakietu Portable.CommonServiceLocator.

I see the new "group" feature in the NuGet docs showing how to specify dependencies in your .nuspec file i myślę, że zrobi to, co chcę, ale nie jestem pewien, jak to przetestować.

Oto co myślę muszę zrobić i mam nadzieję, że ktoś może potwierdzić moje podejście lub wskaż mnie we właściwym kierunku:

<dependencies> 
    <group> 
    <!-- Always include regardless of target framework --> 
    <dependency id="Autofac" /> 
    </group> 
    <group targetFramework="net40"> 
    <!-- Also include the full CSL if it's full framework --> 
    <dependency id="CommonServiceLocator" /> 
    </group> 
    <group targetFramework="portable-win+sl50+wp8"> 
    <!-- Otherwise include the Portable CSL --> 
    <dependency id="Portable.CommonServiceLocator" /> 
    </group> 
</dependencies> 

Konkretnie ...

  • Czy moja składnia targetFramework jest właściwa? Nie mogę znaleźć żadnych przykładów, więc nie wiem, czy mechanizm rozgraniczony + ma rację, czy powinien być rozdzielany przecinkami.
  • Czy domyślna grupa będzie działać? Ta grupa z nieokreśloną strukturą docelową - czy będzie ona zawsze uwzględniana, czy też trzeba ją skopiować/wkleić w każdej grupie?

Odpowiedz

4

Tak, to całkiem poprawne. Szczegóły na temat przenośnych nazw frameworków można znaleźć tutaj: http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Framework_Names

Jeszcze jedna rzecz, którą znalazłem, ponieważ domyślnie wygrana + sl50 + wp8 obejmuje net45, możesz chcieć ją uwzględnić, aby ta grupa zależności została zainstalowana.

+0

Jeśli to jest pełne net45, chcę go używać CommonServiceLocator, a nie przenośne, więc chciałbym go użyć? targetFramework = "net40 + net45" –

+0

nie, nie jest wymagane i działałoby poprawnie i użyłoby podczas instalacji w projekcie kierowania na net4.5, ponieważ przypisałoby to dokładne dopasowanie wyżej niż biblioteka przenośna. i po prostu określenie net40 będzie działało jako "Kiedy NuGet instaluje pakiet, który ma wiele wersji zespołów, próbuje dopasować nazwę szkieletu do struktury docelowej projektu.Jeśli dopasowanie nie zostanie znalezione, NuGet kopiuje zestaw, który jest dla najwyższej wersji, która jest mniejsza lub równa strukturze docelowej projektu " – Deepak

+0

To brzmi tak, jakbym rzeczywiście chciał pominąć odniesienie do net45, a reszta rzeczy powinna po prostu wpadnij na miejsce. –

Powiązane problemy