Co robi pakiet Microsoft.Bcl.Build NuGet?


83

Nie mogę znaleźć żadnej dokumentacji na ten temat - linki ze strony Microsoft.Bcl.Build Nuget nie zapewniają wiele pomocy:

Ten pakiet zawiera składniki infrastruktury kompilacji, dzięki czemu projekty odwołujące się do określonych pakietów firmy Microsoft mogą pomyślnie kompilować.

Nie należy bezpośrednio odwoływać się do tych pakietów, chyba że pojawi się ostrzeżenie dotyczące kompilacji, które instruuje Cię, aby dodać odwołanie.

Patrząc na Microsoft.Bcl.Build.targetsplik, wygląda na to, że zarządza on przekierowaniami powiązań i odniesieniami do pakietów. Wygląda na to, że niektóre z tych funkcji są używane tylko podczas uruchamiania w programie Visual Studio.

Czy ktoś może udzielić więcej informacji na temat tego, co robi ten pakiet? Jest to uciążliwe w naszym środowisku serwera kompilacji , czy można go zignorować podczas tworzenia całkowicie z kodu źródłowego (np. Środowisko serwera kompilacji)?

Odpowiedzi:


26

Patrząc na Microsoft.Bcl.Build.targetsto, ma kilka celów konfiguracji projektu, np:

  • EnsureBindingRedirects - Określ, które odwołania są włączone do przekierowań powiązań i zaktualizuj plik app.config za ich pomocą
  • BclBuildValidateNugetPackageReferences - Ten cel sprawdza, czy wszystkie pakiety NuGet zainstalowane w bieżącym projekcie mają również swoje zależności (zależności przechodnie) zainstalowane w bieżącym projekcie.

Na podstawie tej oceny zdecydowałem, że ta funkcja jest potrzebna tylko w środowisku deweloperskim, podczas dodawania / usuwania / aktualizowania zależności NuGet; i że można go zignorować w środowisku CI, gdzie powoduje problemy.

Dlatego chcę zachować zależność w moich plikach * .csproj, ale zignorować ją podczas uruchamiania kompilacji CI. Zrobiłem to, dodając warunkowy import do pliku docelowego środowiska kompilacji (np. Builder.targets), który zawiera ten blok:

<!-- Skip Microsoft.Bcl.Build functionality when building only from Source. -->
<PropertyGroup>
  <BclBuildImported>Ignore</BclBuildImported>
</PropertyGroup>

Efektem netto jest ignorowanie celów w środowisku CI, ale aktywowanie ich w środowisku programistycznym. Mam to uruchomione od ponad tygodnia i jak dotąd nie ma żadnych problemów ...

Nadal chciałbym wiedzieć, czy ktoś ma lepsze informacje na temat tego pakietu, które wskazują, że zrobienie tego jest złym pomysłem. Na razie uważam, że to dobry pomysł.

Edycja 2018-02-01:

Zauważ, że parametr ignore można również przekazać w wierszu poleceń, aby pominąć Microsoft.Bcl.Build.targetslogikę:

msbuild (targets, etc) /p:BclBuildImported=Ignore

Nie całkiem zrozumiałem So I want to keep the dependency in my *.csproj files, but ignore it. I did that by adding a conditional import on a build environment targets file (eg builder.targets), czy możesz rozwinąć?
JobaDiniz

Musiałem zachować odniesienie projektu do Microsoft.Bcl.Build, aby można go było używać podczas programowania / w programie Visual Studio. Logika działa podczas aktualizacji zależności. Ale chciałem go wyłączyć podczas kompilacji serwera kompilacji z powodu problemów z uruchomieniem go na serwerze kompilacji.
crimbo

1
Aby wyjaśnić, jak to sprawdzić, oto przykład tego, co dodałem do elementów <Target> i <Import>: For <Target>: Condition="$(BclBuildImported) != 'Ignore'"and for <Import>:Condition="$(BclBuildImported) != 'Ignore' And Exists('$(SolutionDir)\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')"
Auri Rahimzadeh

Stwierdziłem również, że to głupia rzecz, która pozostała z mojego starego kodu, który wymagał .nuget \ something.targets
Auri Rahimzadeh

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.