Visual Studio (2010-2019) sayangnya tidak secara langsung mendukungnya saat Anda melakukan debug, ini hanya dimaksudkan untuk penerbitan - bahkan dengan ekstensi SlowCheetah (jawaban yang ditandai) itu tidak berfungsi untuk saya (hanya untuk proyek yang menggunakan app.config daripada web.config).
Perhatikan bahwa ada solusi yang dijelaskan di codeproject .
Ini menjelaskan cara memodifikasi file .msproj untuk menimpa web.config saat ini dengan versi yang diubah.
Pertama-tama saya akan menjelaskan solusi tersebut sebagai Opsi 1 , tetapi baru-baru ini saya menemukan Opsi 2 lain , yang lebih mudah digunakan (jadi Anda dapat menggulir ke bawah ke opsi 2 secara langsung jika Anda mau):
Opsi 1: Saya telah menambahkan instruksi yang diambil dari artikel codeproject asli (lihat tautan di atas), karena tangkapan layar di sana sudah hilang, dan saya tidak ingin kehilangan seluruh informasi:
VS.Net tidak melakukan transformasi apa pun saat Anda mengembangkan dan hanya men-debug lingkungan lokal Anda. Tetapi ada beberapa langkah yang dapat Anda lakukan untuk mewujudkannya jika Anda mau.
- Pertama, buat konfigurasi yang Anda inginkan di VS.Net , dengan asumsi debug dan rilis default tidak cukup untuk apa yang ingin Anda capai.
- Klik kanan pada Anda
web.config
dan pilih Add Config Transforms - ini akan membuat konfigurasi transformasi dependen untuk setiap konfigurasi yang Anda tentukan.
- Sekarang Anda dapat mengubah nama
web.config
menjadi web.base.config
.
- Tambahkan
web.config
ke proyek Anda. Tidak masalah apa yang ada di dalamnya karena itu akan ditimpa setiap kali kita melakukan pembangunan tetapi kita menginginkannya menjadi bagian dari proyek sehingga VS.Net tidak memberi kita pop- "Proyek Anda tidak dikonfigurasi untuk Debugging" naik.
- Edit
.csproj
File Proyek Anda dan tambahkan TransformXml
tugas berikut ke target AfterBuild. Di sini Anda dapat melihat saya akan mengubah web.base.config
file menggunakan web.[configuration].config
dan akan menyimpannya sebagai web.config
. Untuk detailnya, periksa Q&A Microsoft ini , dan untuk instruksi bagaimana memperluas build, lihat di sana .
Pilihan 2:
Berdasarkan jawaban ini , saya telah mengembangkan aplikasi konsol sederhana, TransformConfig.exe (dalam sintaks C # 6.0):
using System;
using System.Linq;
using Microsoft.Web.XmlTransform;
namespace TransformConfig
{
class Program
{
static int Main(string[] args)
{
var myDocumentsFolder = $@"C:\Users\{Environment.UserName}\Documents";
var myVsProjects = $@"{myDocumentsFolder}\Visual Studio 2015\Projects";
string srcConfigFileName = "Web.config";
string tgtConfigFileName = srcConfigFileName;
string transformFileName = "Web.Debug.config";
string basePath = myVsProjects + @"\";
try
{
var numArgs = args?.Count() ?? 0;
if (numArgs == 0 || args.Any(x=>x=="/?"))
{
Console.WriteLine("\nTransformConfig - Usage:");
Console.WriteLine("\tTransformConfig.exe /d:tgtConfigFileName [/t:transformFileName [/s:srcConfigFileName][/b:basePath]]");
Console.WriteLine($"\nIf 'basePath' is just a directory name, '{basePath}' is preceeded.");
Console.WriteLine("\nTransformConfig - Example (inside PostBuild event):");
Console.WriteLine("\t\"c:\\Tools\\TransformConfig.exe\" /d:Web.config /t:Web.$(ConfigurationName).config /s:Web.Template.config /b:\"$(ProjectDir)\\\"");
Environment.ExitCode = 1;
return 1;
}
foreach (var a in args)
{
var param = a.Trim().Substring(3).TrimStart();
switch (a.TrimStart().Substring(0,2).ToLowerInvariant())
{
case "/d":
tgtConfigFileName = param ?? tgtConfigFileName;
break;
case "/t":
transformFileName = param ?? transformFileName;
break;
case "/b":
var isPath = (param ?? "").Contains("\\");
basePath = (isPath == false)
? $@"{myVsProjects}\" + param ?? ""
: param;
break;
case "/s":
srcConfigFileName = param ?? srcConfigFileName;
break;
default:
break;
}
}
basePath = System.IO.Path.GetFullPath(basePath);
if (!basePath.EndsWith("\\")) basePath += "\\";
if (tgtConfigFileName != srcConfigFileName)
{
System.IO.File.Copy(basePath + srcConfigFileName,
basePath + tgtConfigFileName, true);
}
TransformConfig(basePath + tgtConfigFileName, basePath + transformFileName);
Console.WriteLine($"TransformConfig - transformed '{basePath + tgtConfigFileName}' successfully using '{transformFileName}'.");
Environment.ExitCode = 0;
return 0;
}
catch (Exception ex)
{
var msg = $"{ex.Message}\nParameters:\n/d:{tgtConfigFileName}\n/t:{transformFileName}\n/s:{srcConfigFileName}\n/b:{basePath}";
Console.WriteLine($"TransformConfig - Exception occurred: {msg}");
Console.WriteLine($"TransformConfig - Processing aborted.");
Environment.ExitCode = 2;
return 2;
}
}
public static void TransformConfig(string configFileName, string transformFileName)
{
var document = new XmlTransformableDocument();
document.PreserveWhitespace = true;
document.Load(configFileName);
var transformation = new XmlTransformation(transformFileName);
if (!transformation.Apply(document))
{
throw new Exception("Transformation Failed");
}
document.Save(configFileName);
}
}
}
Pastikan bahwa Anda menambahkan DLL "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.XmlTransform.dll"
sebagai referensi (contoh ini berlaku untuk VS 2015, untuk versi yang lebih lama ganti v14.0
di jalur dengan nomor versi yang sesuai, mis.v11.0
).
Untuk Visual Studio 2017, skema penamaan jalan telah berubah: Misalnya, untuk versi enterprise itu adalah di sini: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\Web
.
Saya berasumsi bahwa untuk versi profesional Anda perlu mengganti Enterprise
di jalur dengan Professional
. Jika Anda menggunakan versi pratinjau, ganti 2017
dengan Preview
.
Berikut gambaran bagaimana jalan telah berubah untuk berbagai versi Visual Studio (jika Anda tidak memiliki versi Enterprise Anda mungkin perlu mengganti Enterprise
dengan Professional
di jalan):
VS Version Path (untuk Microsoft.Web.XmlTransform.dll
)
2015 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web
2017 C:\Program Files (x86)\Microsoft Visual Studio\2017\
Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\Web
2019 C:\Program Files (x86)\Microsoft Visual Studio\2019\
Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\Web
Kompilasikan dan letakkan file .exe ke dalam direktori, mis C:\MyTools\
.
Penggunaan:
Anda dapat menggunakannya dalam acara pasca-pembuatan (di properti proyek , pilih Peristiwa Build , lalu edit baris perintah Peristiwa pasca-pembangunan ). Parameter baris perintah adalah (contoh):
"C: \ MyTools \ TransformConfig.Exe" /d:Web.config /t:Web.$(ConfigurationName).config /s:Web.Template.config / b: "$ (ProjectDir) \"
yaitu, pertama nama file konfigurasi, diikuti oleh file konfigurasi transformasi, diikuti oleh konfigurasi template opsional, diikuti dengan jalur ke proyek Anda yang berisi kedua file tersebut.
Saya telah menambahkan parameter konfigurasi template opsional karena jika tidak, konfigurasi lengkap asli Anda akan ditimpa oleh transformasi, yang dapat dihindari dengan menyediakan template.
Buat template hanya dengan menyalin Web.config asli dan beri nama Web.Template.config.
catatan:
Jika Anda mau, Anda juga dapat menyalin TransformConfig.exe
file ke jalur Visual Studio yang disebutkan di atas tempat Microsoft.Web.XmlTransform.dll
tinggal dan merujuknya di semua proyek Anda di mana Anda perlu mengubah konfigurasi Anda.
Bagi Anda yang bertanya-tanya mengapa saya menambahkan Environment.ExitCode = x;
tugas: Hanya mengembalikan int dari Utama tidak membantu dalam acara pembangunan. Lihat detailnya di sini.
Jika Anda menerbitkan proyek Anda dan Anda menggunakan Web.Template.config, pastikan Anda melakukan rekondisi pada solusi Anda dengan konfigurasi yang benar (biasanya Rilis) sebelum Anda menerbitkan. Alasannya adalah Web.Config ditimpa selama proses debug dan Anda mungkin akan mengubah file yang salah jika tidak.