Widziałem to w pliku projektu pewnego dnia:
<ProjectReference Include="Foo\Bar\Baz.csproj">
<Project>{A GUID HERE}</Project>
<Name>Baz</Name>
<Private>False</Private> <!-- ??? -->
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
</ProjectReference>
Każdy węzeł w a ProjectReference
wydaje się być oczywisty (plik projektu, do którego istnieje odwołanie, identyfikator GUID, nazwa do wyświetlenia w eksploratorze rozwiązań oraz to, czy bieżący projekt powinien łączyć się z projektem, do którego się odwołuje), z wyjątkiem Private
, a strona Typowe elementy projektu MSBuild nie udokumentuj tę wartość. (Jest to Private
ustawienie udokumentowane Reference
zamiast ProjectReference
- ale ma Never
, Always
, i PreserveNewest
ustawienia, nie prawdziwe i fałszywe)
Co robi to ustawienie?
visual-studio
msbuild
Billy ONeal
źródło
źródło
ProjectReference
element jest rozpoznawany przez (przynajmniej) infrastrukturę wspierającą C # i C ++ MSBuild; wygląda na to, że jest obsługiwany głównie wMicrosoft.Common.CurrentVersion.targets
pliku.Odpowiedzi:
Private
Tag utrzymuje obsługi nadpisanie do „Kopia lokalna” checkbox w folderze Visual Studio Referencje. To kontroluje, czy odwołanie jest używane z GAC, czy też skopiuje zestaw, do którego się odwołuje, do katalogu kompilacji.Chociaż nie mogę znaleźć żadnej dokumentacji MSDN na ten temat (quelle niespodzianka), wynika to z zachowania i komentarza, wMicrosoft.Common.CurrentVersion.targets:1742
którym jest stosowany:Jest to udokumentowane w MSDN> typowych elementach projektu MSBuild i jest widoczne na podstawie zachowania oraz komentarza, w
Microsoft.Common.CurrentVersion.targets:1742
którym jest stosowany:źródło
<Private>
brakuje, to nie jest równoważneTrue
. Wyszukaj „MSBuild CopyLocal błąd”. Np. Patrz stackoverflow.com/questions/1132243msbuild\Reference.cs:949
<Private>
jest ustawiona naTrue
, MSBuild nadal nie zawiera odwołania w danych wyjściowych, jeśli nie jest używane przez aplikację? To jest obecne zachowanie, które otrzymuję lokalnie ...Chcę tylko powiedzieć, że
<Private>false</Private>
(do których można zastosowaćProjectReference
) może nie działać podczas używania,<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Publish" Properties="$(_MSBuildProperties)" />
a projekt$(MSBuildProjectFullPath)
ma takie,ProjectReference
które mają<None><CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory></None>
. Przeczytałem kod źródłowy w okolicy https://github.com/dotnet/sdk/blob/master/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets i znalazłem rozwiązanie. Musisz zdefiniować,_GetChildProjectCopyToPublishDirectoryItems=false
więc przykładem będzie:<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Publish" Properties="TargetFramework=$(TargetFramework);_GetChildProjectCopyToPublishDirectoryItems=false" />
źródło