ভিজ্যুয়াল স্টুডিও (2010 - 2019) দুর্ভাগ্যক্রমে আপনি সরাসরি ডিবাগ করার সময় এটি সমর্থন করে না , এটি কেবল প্রকাশের উদ্দেশ্যেই করা হয়েছে - এমনকি এক্সটেনশান স্লোচিথ (চিহ্নিত উত্তর) দিয়েও এটি আমার পক্ষে কাজ করে না (কেবল অ্যাপ্লিকেশন কনফিগ ব্যবহার করে কেবল প্রকল্পগুলির জন্য) ওয়েবকনফিগ)।
নোট একটি নেই কার্যসংক্রান্ত codeproject এ বর্ণিত ।
এটি বর্ণনা করে যে কীভাবে রূপান্তরিত সংস্করণ দ্বারা বর্তমান ওয়েবকনফিগকে ওভাররাইট করতে .msproj ফাইলটি পরিবর্তন করতে হবে।
আমি প্রথমে সেই বিকল্পটিকে প্রথম বিকল্প 1 হিসাবে বর্ণনা করব , তবে আমি সম্প্রতি একটি অপশন 2 খুঁজে পেয়েছি যা ব্যবহার করা সহজ (যাতে আপনি যদি চান তবে সরাসরি বিকল্প 2 তে স্ক্রোল করতে পারেন):
বিকল্প 1: আমি মূল কোডপ্রজেক্ট নিবন্ধ থেকে নেওয়া নির্দেশাবলী যুক্ত করেছি (উপরের লিঙ্কটি দেখুন), কারণ স্ক্রিনশটগুলি ইতিমধ্যে শেষ হয়ে গেছে, এবং আমি সম্পূর্ণ তথ্য হারাতে চাই না:
আপনি যখন আপনার স্থানীয় পরিবেশটি বিকাশ করছেন এবং কেবল ডিবাগ করছেন তখন ভিএস.নেট কোনও রূপান্তরকরণ করে না। তবে আপনি যদি চান তা করতে এটি করতে কিছু পদক্ষেপ রয়েছে।
- প্রথমে, ভিএস.নেটে আপনি যে কনফিগারেশনগুলি চান তা তৈরি করুন , ডিফল্ট ডিবাগ এবং আপনি যেটি সম্পাদন করার চেষ্টা করছেন তার জন্য প্রকাশটি যথেষ্ট নয় বলে ধরে নিবেন ।
- আপনার ডান ক্লিক করুন
web.config
এবং কনফিগার ট্রান্সফর্ম যোগ করুন নির্বাচন করুন - এটি আপনার প্রতিটি কনফিগারেশন সংজ্ঞায়িত জন্য নির্ভরশীল রূপান্তর কনফিগারেশন তৈরি করবে।
- এখন আপনি আপনার নাম পরিবর্তন করতে
web.config
পারেন web.base.config
।
web.config
আপনার প্রকল্পে একটি যুক্ত করুন । এতে যা আছে তাতে কিছু আসে যায় না কারণ এটি প্রতিবারই কোনও বিল্ড করার সময় এটি ওভাররাইট হয়ে যাবে তবে আমরা এটি প্রকল্পের অংশ চাই তাই ভিএস.নেট আমাদের "আপনার প্রকল্পটি ডিবাগিংয়ের জন্য কনফিগার করা হয়নি" পপ- আপ
- আপনার
.csproj
প্রকল্পের ফাইলটি সম্পাদনা করুন এবং নিম্নলিখিত TransformXml
কার্যটি আফটার বিল্ড টার্গেটে যুক্ত করুন। এখানে আপনি দেখতে পাচ্ছেন যে আমি এটি web.base.config
ব্যবহার করে ফাইলটি রূপান্তর web.[configuration].config
করব এবং এটি এটি হিসাবে সংরক্ষণ করবে web.config
। বিশদগুলির জন্য, দয়া করে এই মাইক্রোসফ্ট প্রশ্নোত্তর পরীক্ষা করুন এবং কীভাবে বিল্ডটি প্রসারিত করতে হবে তার নির্দেশাবলীর জন্য, সেখানে দেখুন ।
বিকল্প 2:
এই উত্তরের ভিত্তিতে , আমি একটি সাধারণ কনসোল অ্যাপ্লিকেশন, ট্রান্সফর্মকনফিগ.এক্সপি (সি # 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"
একটি রেফারেন্স হিসাবে যুক্ত করেছেন (পুরানো সংস্করণগুলির জন্য v14.0
উপযুক্ত সংস্করণ সংখ্যা দ্বারা উদ্বোধন করা হয়েছে, উদাহরণস্বরূপ v11.0
) পুরানো সংস্করণগুলির জন্য এটি ভিএস 2015-র ক্ষেত্রে প্রযোজ্য ।
জন্য ভিসুয়াল স্টুডিও 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\
।
ব্যবহার:
আপনি এটি আপনার পোস্ট বিল্ড ইভেন্টে ব্যবহার করতে পারেন ( প্রকল্পের বৈশিষ্ট্যগুলিতে , ইভেন্টগুলি তৈরি করুন নির্বাচন করুন , তারপরে পোস্ট-বিল্ড ইভেন্ট কমান্ড লাইনটি সম্পাদনা করুন )। কমান্ডলাইন প্যারামিটারগুলি (উদাহরণ):
"সি: \ মাইটুলস \ ট্রান্সফর্মকনফিগ.এক্সে" /d:Web.config /t:Web.$( কনফিগারেশননাম)).config /s:Web.Template.config / b: "$ (প্রজেক্টডির) \"
যেমন প্রথমে কনফিগার ফাইলের নাম, তারপরে ট্রান্সফর্ম কনফিগারেশন ফাইল, তার পরে একটি alচ্ছিক টেম্পলেট কনফিগারেশন এবং তারপরে উভয় ফাইল যুক্ত আপনার প্রকল্পের পথ।
আমি alচ্ছিক টেম্পলেট কনফিগার প্যারামিটার যুক্ত করেছি কারণ অন্যথায় আপনার আসল সম্পূর্ণ কনফিগারটি ট্রান্সফর্ম দ্বারা ওভাররাইট করা হবে, যা কোনও টেমপ্লেট সরবরাহ করে এড়ানো যায়।
মূল ওয়েবকনফিগটি অনুলিপি করে এটি টেমপ্লেট তৈরি করুন এবং এটির নাম রাখুন Web.Template.config।
বিঃদ্রঃ:
আপনি যদি পছন্দ করেন তবে TransformConfig.exe
উপরের উল্লিখিত ভিজ্যুয়াল স্টুডিও পথে ফাইলটি অনুলিপি করতে পারবেন এবং Microsoft.Web.XmlTransform.dll
আপনার সমস্ত প্রকল্পে যেখানে আপনার কনফিগারগুলি রূপান্তর করতে হবে সেখানে তা উল্লেখ করতে পারেন।
আপনারা যারা ভাবছেন যে কেন আমি Environment.ExitCode = x;
অ্যাসাইনমেন্ট যুক্ত করেছি : কেবল মেইনের কাছ থেকে কোনও ইনট ফিরিয়ে দেওয়া বিল্ড ইভেন্টে সহায়তা করেনি। বিস্তারিত এখানে দেখুন ।
আপনি আপনার প্রকল্পের প্রকাশ করছেন এবং আপনি একটি Web.Template.config ব্যবহার করেন, তাহলে নিশ্চিত করুন যে আপনি করেনি পুনর্নির্মাণের অধিকার কনফিগারেশন (সাধারণত রিলিজ) সঙ্গে আপনার সমাধান উপর আগে আপনি প্রকাশ করুন। কারণটি হ'ল ওয়েব.কনফিগ ডিবাগ করার সময় ওভাররাইট করা হয় এবং অন্যথায় আপনি ভুল ফাইলটি রূপান্তর করতে পারেন up