Saya melihat ini di file proyek beberapa hari yang lalu:
<ProjectReference Include="Foo\Bar\Baz.csproj">
<Project>{A GUID HERE}</Project>
<Name>Baz</Name>
<Private>False</Private> <!-- ??? -->
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
</ProjectReference>
Setiap node di a ProjectReference
tampaknya cukup jelas (file proyek yang direferensikan, GUID, nama yang akan ditampilkan di explorer solusi, dan apakah proyek saat ini harus ditautkan ke proyek yang dirujuk) kecuali Private
, dan halaman Common MSBuild Project Items tidak t mendokumentasikan nilai ini. (Ada Private
pengaturan terdokumentasi untuk Reference
daripada ProjectReference
- tetapi memiliki Never
, Always
, dan PreserveNewest
pengaturan, tidak benar dan yang salah)
Apa fungsi pengaturan ini?
visual-studio
msbuild
Billy ONeal
sumber
sumber
ProjectReference
item tersebut dikenali oleh (setidaknya) infrastruktur pendukung C # dan C ++ MSBuild; sepertinya sebagian besar ditangani dalamMicrosoft.Common.CurrentVersion.targets
file.Jawaban:
The
Private
tag mempertahankan user-override ke "Salin Lokal" kotak centang di folder Referensi Visual Studio. Ini mengontrol apakah referensi digunakan dari GAC atau apakah akan menyalin rakitan yang direferensikan ke direktori build.Meskipun saya tidak dapat menemukan dokumentasi MSDN untuk efek ini (kejutan quelle), itu terbukti dari perilaku dan dari komentar diMicrosoft.Common.CurrentVersion.targets:1742
mana itu diterapkan:Ini didokumentasikan di MSDN> Item proyek MSBuild umum , dan terbukti dari perilaku dan dari komentar di
Microsoft.Common.CurrentVersion.targets:1742
mana itu diterapkan:sumber
<Private>
hilang, maka itu tidak sama denganTrue
. Cari "bug CopyLocal MSBuild". Misalnya, lihat stackoverflow.com/questions/1132243msbuild\Reference.cs:949
<Private>
diatur keTrue
, MSBuild masih tidak menyertakan referensi dalam Output jika tidak digunakan oleh aplikasi? Ini adalah perilaku saat ini yang saya dapatkan secara lokal ...Saya hanya ingin negara, yang
<Private>false</Private>
(yang dapat Anda terapkan untukProjectReference
s) tidak bekerja mungkin ketika menggunakan<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Publish" Properties="$(_MSBuildProperties)" />
dan proyek$(MSBuildProjectFullPath)
MemilikiProjectReference
s yang memiliki<None><CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory></None>
. Saya telah membaca kode sumber di sekitar https://github.com/dotnet/sdk/blob/master/src/Tasks/Microsoft.NET.Build.Tasks/t Target /Microsoft.NET.Publish.t target dan menemukan solusinya. Anda perlu mendefinisikan_GetChildProjectCopyToPublishDirectoryItems=false
sehingga contohnya adalah:<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Publish" Properties="TargetFramework=$(TargetFramework);_GetChildProjectCopyToPublishDirectoryItems=false" />
sumber