दृश्य स्टूडियो (2010 - 2019) दुर्भाग्य से सीधे समर्थन नहीं करता है जब आप डिबगिंग करते हैं, तो यह केवल प्रकाशन के लिए अभिप्रेत है - यहां तक कि विस्तार के साथ भी धीमी गति से (चिह्नित उत्तर) यह मेरे लिए काम नहीं करता है (केवल ऐप का उपयोग करने वाली परियोजनाओं के लिए। इसके बजाय। web.config)।
ध्यान दें कि कोडप्रोजेक्ट में वर्णित एक वर्कअराउंड है ।
यह वर्णन करता है कि रूपांतरित संस्करण द्वारा वर्तमान web.config को अधिलेखित करने के लिए .msproj फ़ाइल को कैसे संशोधित किया जाए।
मैं पहले विकल्प 1 के रूप में उस वर्कअराउंड का वर्णन करूंगा , लेकिन मुझे हाल ही में एक और विकल्प 2 का पता चला है , जिसका उपयोग करना आसान है (ताकि आप चाहें तो सीधे विकल्प 2 पर स्क्रॉल कर सकें):
विकल्प 1: मैंने मूल कोडप्रोजेक्ट लेख (ऊपर दिए गए लिंक देखें) से लिए गए निर्देशों को जोड़ा है , क्योंकि स्क्रीन शॉट्स वहां पहले ही जा चुके हैं, और मैं पूरी जानकारी नहीं खोना चाहता:
जब आप विकसित हो रहे हैं और सिर्फ अपने स्थानीय वातावरण को डीबग कर रहे हैं, तो VS.Net कोई भी रूपांतरण नहीं करता है। लेकिन अगर आप चाहें तो ऐसा करने के लिए कुछ कदम उठाए जा सकते हैं।
- सबसे पहले, वी.एस.नेट पर इच्छित कॉन्फ़िगरेशन बनाएं , जो डिबग डिफॉल्ट मानकर रिलीज़ करने के लिए पर्याप्त नहीं है।
- अपने पर राइट क्लिक करें
web.config
और Add config Transform का चयन करें - यह आपके द्वारा परिभाषित प्रत्येक कॉन्फ़िगरेशन के लिए एक निर्भर रूपांतरण कॉन्फ़िगरेशन बनाएगा।
- अब आप अपना नाम बदल सकते
web.config
हैं web.base.config
।
web.config
अपने प्रोजेक्ट में जोड़ें यह उस में क्या है कोई फर्क नहीं पड़ता, क्योंकि यह हर बार जब हम एक निर्माण कर अधिलेखित हो जाएगा लेकिन हम इसे परियोजना इसलिए का हिस्सा चाहते VS.Net हमें नहीं देता है "आपका प्रोजेक्ट डीबगिंग के लिए कॉन्फ़िगर नहीं है" पॉप यूपी।
- अपनी
.csproj
परियोजना फ़ाइल को संपादित करें और TransformXml
आफ्टरबिल्ड लक्ष्य के लिए निम्न कार्य जोड़ें । यहाँ आप देख सकते हैं कि मैं web.base.config
फ़ाइल का उपयोग करके रूपांतरण कर रहा हूँ web.[configuration].config
और यह इसे इस तरह बचाएगा web.config
। विवरण के लिए, कृपया इस Microsoft Q & A की जांच करें , और निर्देश के लिए कि बिल्ड को कैसे बढ़ाया जाए, वहां देखें ।
विकल्प 2:
इस उत्तर के आधार पर , मैंने एक सरल कंसोल ऐप, ट्रांसफॉर्मकॉन्फ़ ..exe (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);
}
}
}
सुनिश्चित करें कि आप "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.XmlTransform.dll"
संदर्भ के रूप में DLL जोड़ते हैं (यह उदाहरण वीएस 2015 पर लागू होता है, पुराने संस्करणों के लिए v14.0
पथ में उपयुक्त संस्करण संख्या, उदाहरण के लिए प्रतिस्थापित करें v11.0
)।
के लिए दृश्य स्टूडियो 2017, पथ के लिए नामकरण स्कीमा बदल गया है: उदाहरण के लिए, उद्यम संस्करण के लिए यह यहाँ है: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\Web
।
मुझे लगता है कि पेशेवर संस्करण के लिए आपको Enterprise
रास्ते से बदलने की आवश्यकता है Professional
। आप पूर्वावलोकन संस्करण का उपयोग कर रहे हैं, इसके साथ ही बदलने के 2017
द्वारा Preview
।
यहाँ एक अवलोकन कैसे पथ (यदि आप एंटरप्राइज़ संस्करण नहीं है आप को बदलने के लिए आवश्यकता हो सकती है दृश्य स्टूडियो के विभिन्न संस्करणों के लिए बदल गया है है Enterprise
द्वारा Professional
रास्ते में):
वीएस वर्जन पाथ (फॉर 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
इसे संकलित करें और .exe फ़ाइल को एक निर्देशिका में रखें, जैसे C:\MyTools\
।
उपयोग:
आप इसे अपने पोस्ट बिल्ड ईवेंट ( प्रोजेक्ट प्रॉपर्टीज में , बिल्ड ईवेंट चुनें , फिर पोस्ट-बिल्ड इवेंट कमांड लाइन संपादित करें ) में उपयोग कर सकते हैं। कमांडलाइन पैरामीटर हैं (उदाहरण):
"C: \ MyTools \ TransformConfig.Exe" /d:Web.config /t:Web.$(ConfigurationName).config /s :Web.Template.config / b: "$ (ProjectDir) \"
अर्थात पहले विन्यास फाइल का नाम, उसके बाद ट्रांसफॉर्म फाइल, उसके बाद एक वैकल्पिक टेम्प्लेट कॉन्फिगर, उसके बाद दोनों फाइलों के लिए आपके प्रोजेक्ट का रास्ता।
मैंने वैकल्पिक टेम्प्लेट कॉन्फिगर पैरामीटर जोड़ा है क्योंकि अन्यथा आपके मूल पूर्ण कॉन्फिगर को ट्रांसफॉर्मेशन द्वारा अधिलेखित कर दिया जाएगा, जिसे टेम्प्लेट प्रदान करके टाला जा सकता है।
बस मूल Web.config की प्रतिलिपि बनाकर टेम्पलेट बनाएं और इसे Web.Template.config नाम दें।
ध्यान दें:
यदि आप पसंद करते हैं, तो आप TransformConfig.exe
फ़ाइल को ऊपर बताए गए विज़ुअल स्टूडियो पथ पर भी कॉपी कर सकते हैं, Microsoft.Web.XmlTransform.dll
जहाँ आपके सभी प्रोजेक्ट्स में रहते हैं और इसका संदर्भ देते हैं, जहाँ आपको अपने कॉन्फ़िगरेशन को बदलने की आवश्यकता है।
आप में से जो सोच रहे हैं कि मैंने Environment.ExitCode = x;
असाइनमेंट क्यों जोड़े : मेन से इंट को वापस करने से बिल्ड इवेंट में मदद नहीं मिली। यहां देखें विवरण
यदि आप अपनी परियोजना को प्रकाशित कर रहे हैं और आप Web.Template.config का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आपने प्रकाशित करने से पहले अपने समाधान पर सही कॉन्फ़िगरेशन (आमतौर पर रिलीज़) के साथ पुनर्निर्माण किया था । कारण यह है कि Web.Config डीबगिंग के दौरान अधिलेखित हो जाता है और आप अन्यथा गलत फ़ाइल को परिवर्तित कर सकते हैं।