Ketika saya membersihkan dan kemudian membangun solusi saya yang memiliki beberapa proyek, jendela output melaporkan bahwa build berhasil. Namun, ketika saya melihat Jendela Daftar Kesalahan , ini menunjukkan kepada saya peringatan ini:
Konflik yang ditemukan antara versi berbeda dari rakitan dependen yang sama yang tidak dapat diselesaikan. Konflik referensi ini tercantum dalam log bangunan ketika verbositas log diatur ke detail. C: \ Program Files (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets
Ketika saya mengklik dua kali pesan ini, itu membuka file C: \ Program (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets file tetapi saya tidak mengerti apa-apa di dalamnya.
Saya menggunakan Visual Studio Express 2013 untuk Web.
Bagaimana cara mencari tahu apa yang salah dan dengan DLL mana dan bagaimana cara membuat peringatan itu pergi?
sumber
Jawaban:
eta: Ada artikel pembunuh tentang hal ini oleh @Nick Craver milik SO yang harus Anda baca
Sementara tanggapan lain mengatakan ini, mereka tidak membuatnya eksplisit, jadi saya akan ....
Pada VS2013.2, untuk benar-benar memicu emisi informasi yang dikutip, Anda tidak perlu membaca pesan yang berbunyi:
Ini tidak benar (atau setidaknya itu untuk beberapa versi Visual Studio - tampaknya OK pada pembaruan VS2015 3 atau yang terbaru). Alih-alih mengubahnya ke Diagnostic (dari Tools-> Options-> Project and Solutions-> Build and Run , atur MSBuild project build output verbosity ), di mana Anda akan melihat pesan seperti:
Kemudian
Ctrl-Alt-O
untuk pergi ke Build output window... Dan ya, bagi mereka yang melihat detail dari pesan [diagnostik], adalah berita bagi orang bebal ini bahwa ada sebuah konvensi di kota di mana semua
6.x
versi, secara internal Assembly Version6.0.0.0
, yaitu hanya komponen SemVer Mayor yang masuk ke dalam Majelis Versi :)sumber
Jalankan
msbuild Foo.sln /t:Rebuild /v:diag
(dariC:\Program Files (x86)\MSBuild\12.0\bin
) untuk membangun solusi Anda dari baris perintah dan dapatkan sedikit lebih detail, kemudian temukan.csproj.
yang mencatat peringatan dan periksa referensi dan referensi proyek lainnya yang menggunakan perakitan umum yang sama yang berbeda dalam versi.Sunting: Anda juga dapat mengatur verbositas build secara langsung di VS2013. Pergi ke
Tools
>Options
menu kemudian pergi keProjects and Solutions
dan mengatur MSBuild verbosity keDiagnostic
.Sunting: Beberapa klarifikasi karena saya sendiri punya satu. Dalam kasus saya, peringatan terjadi karena saya menambahkan referensi menggunakan prompt Resharper sebagai lawan dari dialog Add Reference, yang melakukannya tanpa versi meskipun v4 dan v12 tersedia untuk dipilih.
vs.
Dalam log MSBuild dengan
/v:diag
verbosity tampak seperti berikut. memberikan detail yang dua rujukan bertentangan: -sumber
msbuild "Foo.sln" /t:Rebuild /v:d > build.log
/l:FileLogger,Microsoft.Build.Engine;logfile=build.log
- perhatikan sakelar untuk penjelasan penebang di siniSaya hanya dapat mendukung jawaban Ruben lebih lanjut dengan perbandingan antara dua pesan yang ditampilkan:
dan pesannya:
Jadi, Ruben benar — ini tidak benar. Tidak ada konflik apa pun, hanya majelis yang hilang. Ini sangat membosankan ketika proyek ini adalah aplikasi ASP.NET, karena pandangan dikompilasi sesuai permintaan , yaitu, sebelum ditampilkan untuk pertama kalinya. Inilah saatnya menjadi perlu untuk memiliki majelis tersedia. (Ada opsi untuk melakukan pre-kompilasi pandangan bersama-sama dengan sisa kode, tapi ini cerita lain .) Di sisi lain, jika Anda mengatur verbosity ke Diagnostic Anda mendapatkan output berikut:
Akibatnya, yang perlu Anda lakukan adalah:
Lebih lanjut tentang galeri NuGet di sini . Lebih lanjut tentang mengkompilasi pandangan ASP.NET di sini .
sumber
Mengubah verbosity build di studio visual akan membantu untuk menunjuk ke arah yang benar. Ikuti langkah-langkah di bawah ini untuk mengubah verbositas di VS
Quiet
,Minimal
,Normal
,Detailed
danDiagnostic
Periksa jendela output ( Ctrl+ Alt+ O) di VS untuk melihat perubahan dalam log pembangunan.
sumber
Anda mungkin harus menginstal ulang atau meningkatkan paket NuGet Anda untuk memperbaikinya.
sumber
Manage NuGet packages for solution
-> Di bawahConsolidate
Anda dapat melihat apakah ada versi berbeda dari paket yang sama telah diinstalMengulangi salah satu komentar dari @elshev Klik kanan pada solusi -> Kelola paket NuGet untuk solusi -> Di bawah Konsolidasi, Anda dapat melihat apakah ada versi berbeda dari paket yang sama diinstal. Perbarui paket di sana. Kesalahan konflik diselesaikan.
sumber
Saya menggunakan Visual Studio 2017 dan menemukan ini ketika saya memperbarui beberapa paket Nuget. Apa yang berhasil bagi saya adalah membuka
web.config
file saya dan menemukan<runtime><assemblyBinding>
node dan menghapusnya. Simpanweb.config
dan bangun kembali proyek.Lihatlah
Error List
jendelanya. Anda akan melihat apa yang tampak seperti peringatan panjang tentang konflik yang mengikat. Klik dua kali dan itu akan secara otomatis membuat ulang<runtime><assemblyBinding>
blok dengan pemetaan yang benar.sumber
Sebagaimana dinyatakan dalam masalah dotnet CLI 6583 masalah ini harus diselesaikan dengan
dotnet nuget locals --clear all
perintah.sumber
Saya bisa menyelesaikan ini menginstal Newtonsoft Json di proyek web dengan paket nugget
sumber
Jelas ada banyak penyebab berbeda dan dengan demikian banyak solusi untuk masalah ini. Untuk memasukkan tambang ke dalam campuran, kami memutakhirkan sebuah perakitan (System.Net.Http) yang sebelumnya secara langsung direferensikan dalam proyek Web kami ke versi yang dikelola oleh NuGet. Ini menghapus referensi langsung dalam proyek itu, tetapi proyek Uji kami masih berisi referensi langsung. Memutakhirkan kedua proyek untuk menggunakan perakitan yang dikelola NuGet menyelesaikan masalah.
sumber
Jika Anda melakukan perubahan pada paket - buka kembali sln. Ini berhasil untuk saya!
sumber
Saya menemukan bahwa, kadang-kadang, paket nuget akan menginstal (apa yang saya duga). NET Core memerlukan komponen atau item lain yang bertentangan dengan kerangka kerja yang sudah diinstal. Solusi saya di sana adalah membuka file project (.csproj) dan menghapus referensi tersebut. Misalnya, System.IO, System.Threading dan semacamnya, cenderung ditambahkan ketika Microsoft.Bcl disertakan melalui beberapa paket NuGet yang baru diinstal. Tidak ada alasan untuk versi spesifik dari mereka di proyek saya, jadi saya menghapus referensi dan membangun proyek. Semoga itu bisa membantu.
Anda dapat mencari "referensi" file proyek Anda dan menghapus konflik. Jika mereka termasuk dalam Sistem, singkirkan mereka, dan build seharusnya bekerja. Ini mungkin tidak menjawab semua kasus masalah ini - saya memastikan Anda tahu apa yang berhasil untuk saya :)
Contoh dari apa yang saya komentari:
sumber
Saya mengikuti saran dari beberapa tanggapan di sini untuk mencari tahu apa yang salah, tetapi tidak ada jawaban yang menjelaskan cara memperbaikinya. Masalah saya adalah bahwa satu referensi memerlukan versi yang berbeda dari referensi kedua. Jadi Newtonsoft berada di versi 6, tetapi beberapa DLL lain menginginkan 4,5. Kemudian saya memutakhirkan Newtonsoft sebagai salah satu jawaban lain yang disarankan dan itu membuat segalanya menjadi lebih buruk.
Jadi saya benar-benar menurunkan instal Newtonsoft saya dan peringatan itu hilang (VS 2017):
Klik kanan Referensi di penjelajah solusi dan pilih Kelola Paket NuGet ... Di bawah tab "Diinstal", cari Newtonsoft (atau apa pun konflik Anda) versi. Tidak jelas bagi saya bahwa dropdown ini dapat digunakan untuk menurunkan versi.
sumber
Anda bisa menjalankan Dotnet CLI dengan kata kerja diagnostik penuh untuk membantu menemukan masalah.
dotnet run --verbosity diagnostic >> full_build.log
Setelah build selesai Anda dapat mencari melalui file log (full_build.log) untuk kesalahan tersebut. Mencari "konflik" misalnya, seharusnya membawa Anda langsung ke masalah.
sumber
Saya telah menghapus instalan Microsoft ASP.NET MVC nuget.org dari mengelola NuGet Packagaes dan menginstalnya kembali. Saat menginstal ulang itu menyelesaikan semua konflik yang terkait dengan versi pisau cukur. Cobalah .
sumber
Saya mengubah verbositas MSBuild ke Diagnostic.but tidak bisa menemukan di mana masalahnya jadi menurut jawaban di atas saya memiliki kode ini di app.config:
Jadi saya baru saja mengubah Sistem pertama, Versi dari 4.0.0.0 ke 12.0.0.0 dan proyek saya berhasil.
sumber
Seperti jawaban lainnya, atur level pencatatan output ke detail dan cari konflik di sana, yang akan memberi tahu Anda ke mana harus mencari berikutnya.
Dalam kasus saya, itu mengirim saya ke beberapa arah mencari sumber referensi, tetapi pada akhirnya ternyata masalahnya adalah salah satu proyek perpustakaan kelas portabel saya, itu menargetkan versi yang salah dan menarik sendiri versi referensi, maka konflik. Target ulang cepat dan masalahnya selesai.
sumber
Saya hanya mengalami ini dan masalah setelah beralih paket dari nuget ke dll yang dirujuk secara lokal. Masalahnya adalah runtime binding stuff yang lama di
app.config
.sumber
Saya mendapat peringatan ini setelah bermigrasi ke Referensi Paket. Dalam hasil diagnostik ada informasi bahwa perpustakaan dirujuk oleh perpustakaan yang sama itu sendiri. Ini mungkin bug dari Paket Referensi baru. Solusinya adalah mengaktifkan AutoGenerateBindingRedirects dan menghapus pengarahan ulang pengikatan khusus.
sumber
VS 2017, proyek MVC
Saya tidak tahu mengapa, tetapi bagi saya, solusi untuk masalah ini adalah menghapus
out
parameter dari tanda tangan metode model yang dipanggil dari metode aksi pengontrol. itu perilaku yang sangat aneh tapi itu solusi untuk masalah saya.sumber
Lari
Update-Package
perintah melalui Package Manager ConsoleIni akan memperbaiki MSB3277, apa fungsinya menginstal ulang semua paket dan semua rakitan terkait yang disertai dengan versi setinggi mungkin . Juga dimungkinkan untuk memperbarui paket tertentu saja. Atau downgrade setelah pembaruan jika ingin, masalah ini diperbaiki untuk saya beberapa kali muncul. Bergantung pada berapa banyak paket nuget yang Anda miliki, proses ini mungkin memakan waktu beberapa menit.
Info lebih lanjut tentang dokumen resmi https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages
sumber