Saya ingin tahu cara membaca file teks dari keduanya :

Saat berjalan sebagai mandiri

dan

Saat dijalankan dari aplikasi ASP.NET host.


Saya mengetahui perintah Server.MapPath tetapi hanya berfungsi pada aplikasi ASP.NET dan saya ingin pemuatan file dilakukan dari aplikasi konsol.


Mari kita mulai dengan proyek kosong dan membuat dua proyek:

Pertama, aplikasi Konsol :

enter image description here

Kemudian, aplikasi ASP.NET MVC :

enter image description here

Setelah kita memiliki dua proyek, mari buat file teks :

enter image description here

Dan letakkan sesuatu di sana:

enter image description here

Pastikan itu termasuk dalam folder bin :

enter image description here

Sekarang, kita akhirnya bisa membaca isi file seperti ini:

enter image description here

Menggunakan kode berikut:

enter image description here

Kami mendapatkan output yang diinginkan.

Sekarang, seperti yang dinyatakan di awal posting ini, saya ingin dapat mengakses file dari proyek yang sama, tetapi dipanggil dari aplikasi ASP.NET.

Mari tambahkan aplikasi konsol sebagai ketergantungan proyek TestWebApp :

enter image description here

Dan panggil metodenya seperti ini:

enter image description here

Sekarang saya mendapatkan kesalahan ini:

enter image description here


Saya ingin tahu bagaimana saya akan melanjutkan dan dapat memuat file baik saat menjalankan aplikasi itu sendiri (aplikasi konsol) atau saat menjalankan dari layanan web host (server web asp.net).

0
Alde 3 Juni 2020, 07:08

1 menjawab

Jawaban Terbaik

Gunakan AppContext.BaseDirectory. Ini adalah direktori yang runtime periksa untuk menyelesaikan rakitan. Dalam konteks Anda, ini adalah yang paling dekat dengan direktori output.

Sekarang ada perbedaan antara apa yang dikembalikan untuk Aplikasi Konsol vs Aplikasi Web. Kode umum di bawah ini akan membahas keduanya.

var appContextBase = AppContext.BaseDirectory;
var filePath = appContextBase.IndexOf("bin", StringComparison.OrdinalIgnoreCase) == -1 ? "bin/Files/File.txt" : "Files/File.txt";
var fileContent = File.ReadAllText(appContextBase + filePath);
Console.WriteLine(fileContent);

Untuk Aplikasi Konsol, AppContext.BaseDirectory mengembalikan sesuatu seperti ini - "C:\\Users\\user123\\Documents\\Visual Studio 2017\\Projects\\MySamples\\MySamples\\bin\\Debug\\"

Untuk Aplikasi Web, ini mengembalikan sesuatu seperti ini - "C:\\Users\\user123\\Documents\\Visual Studio 2017\\Projects\\MySamples\\MyWebApp\\"

Itulah alasan saya menambahkan pemeriksaan operator ternary pada filePath.

1
Thimmu Lanka 3 Juni 2020, 12:29