Saya "memecahkan" (membuat solusi) ini dengan cara yang lebih sederhana.
Dalam posting membangun
dotnet publish "$(ProjectFileName)" --no-build -o pub
xcopy "$(ProjectDir)pub\3rdPartyProvider.*.dll" "$(OutDir)"
pub adalah folder tempat Anda ingin item yang telah dipublikasikan digunakan untuk pementasan
CATATAN: tergantung pada versi apa yang dotnet.exeAnda gunakan, perintah --no-buildmungkin tidak tersedia.
Misalnya, tidak tersedia di v2.0.3; dan tersedia di v2.1.402. Saya tahu bahwa VS2017 Update4 memiliki v2.0.3. Dan Update8 memiliki 2.1.x
Memperbarui:
Penyiapan di atas akan bekerja di lingkungan debug dasar tetapi untuk memasukkannya ke lingkungan server / produksi build lebih banyak yang dibutuhkan. Dalam contoh khusus yang harus saya pecahkan ini, kami membangun Release|x64dan Release|x86secara terpisah. Jadi saya memperhitungkan keduanya. Tapi untuk mendukung perintah post build dotnet publish, saya tambahkan dulu RuntimeIdentifierke file project.
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutputPath>..\..\lib\</OutputPath>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<OutputPath>..\..\lib\</OutputPath>
<RuntimeIdentifier>win-x86</RuntimeIdentifier>
</PropertyGroup>
Mengapa saya membutuhkannya dan mengapa Anda bisa pergi tanpanya? Saya memerlukan ini karena program build saya disetel untuk mencegat peringatan MSB3270 , dan gagal membangun jika muncul. Peringatan ini mengatakan, "hei, beberapa file dalam dependensi Anda memiliki format yang salah". Tetapi apakah Anda ingat tujuan dari latihan ini? Kita perlu menarik DLL ketergantungan paket. Dan dalam banyak kasus tidak masalah jika peringatan ini ada karena mengikuti posting membangun tidak peduli. Sekali lagi, ini adalah program build saya yang peduli. Jadi, saya hanya menambahkan RuntimeIdentifierke 2 konfigurasi yang saya gunakan selama pembuatan produksi.
Full Post build
if not exist "$(ProjectDir)obj\$(ConfigurationName)" mkdir "$(ProjectDir)obj\$(ConfigurationName)"
xcopy "$(ProjectDir)obj\$(PlatformName)\$(ConfigurationName)" "$(ProjectDir)obj\$(ConfigurationName)" /E /R /Y
if $(ConfigurationName) == Release (
dotnet publish "$(ProjectFileName)" --runtime win-$(PlatformName) --no-build -c $(ConfigurationName) -o pub --no-restore --no-dependencies
) else (
dotnet publish "$(ProjectFileName)" --no-build -c $(ConfigurationName) -o pub --no-restore --no-dependencies
)
xcopy "$(ProjectDir)pub\my3rdPartyCompany.*.dll" "$(OutDir)" /Y /R
Penjelasan: dotnet publish sedang mencari obj\Debugatau obj\Release. Kami tidak memilikinya selama pembuatan karena build membuat obj\x64\Releaseatau obj\x86\Release. Baris 1 dan 2 mengurangi masalah ini. Sejalan 3 saya memberitahu dotnet.exeuntuk menggunakan konfigurasi tertentu dan target runtime. Jika tidak, saat ini adalah mode debug, saya tidak peduli tentang hal-hal runtime dan peringatan. Dan di baris terakhir saya cukup mengambil dll saya dan menyalinnya ke folder output. Pekerjaan selesai.
dotnet publishmenjadi hack? Sertakan perintah dalam file csproj Anda sebagai skrip post build.