ওয়েব কনফিগারেশন রূপান্তর কাজ করছে না


88

.NET MVC 3.0 অ্যাপ্লিকেশনটিতে আমার কাছে নিম্নলিখিত কনফিগারেশন রয়েছে appSettings:

web.config

<appSettings>
<add key="SMTPHost" value="mail.domain.com"/>
    <add key="SMTPUsername" value="user@gmail.com"/>
    <add key="SMTPPort" value="25"/>
    <add key="SMTPPwd" value="mypassword"/>
    <add key="EmailFrom" value="notific@gmail.com"/>
</appSettings>

ডিবাগিংয়ের জন্য, আমি নিম্নলিখিত কনফিগারেশন রূপান্তর সংজ্ঞায়িত করেছি:

web.Debug.config

<appSettings>
    <add  key="SMTPPort" value="58" xdt:Transform="Replace" xdt:Locator="Match(key)" />
</appSettings>

এবং আমি অ্যাপ্লিকেশনটি ডিবাগ মোডে চালিত করি, তবে আমার এসএমটিপি বন্দরটি এখনও web.config, এর থেকে মূল্য নিচ্ছে না web.Debug.config

এই কনফিগারেশনে কী ভুল হতে পারে কেউ পরামর্শ দিতে পারে?

উত্তর:


156

ওয়েবকনফিগ রূপান্তরগুলি কেবলমাত্র প্রকাশনা অপারেশনের অংশ হিসাবে প্রয়োগ করা হয়।

আপনি যদি কোনও app.configবিল্ড অপারেশনের অংশ হিসাবে এটি করতে চান তবে আপনি স্লোচিটাহ - এক্সএমএল রূপান্তর ভিজ্যুয়াল স্টুডিও প্লাগইনটি ব্যবহার করতে পারেন:

http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5


4
আপনাকে অনেক ধন্যবাদ আপনি আমাকে অনেক সময় বাঁচালেন।
হাবো

4
বাহ এই উত্তরটি পেতে আমাকে 2 ঘন্টা সময় নিয়েছে। এটি পোস্ট করার জন্য ধন্যবাদ আমি আমার চুল আউট টান করা হত।
চিনাবাদাম

দেখে মনে হচ্ছে ভিজ্যুয়াল স্টুডিও 2015 (ওয়েব) এ .কনফিগ রূপান্তরগুলি এখন একটি অন্তর্নির্মিত বৈশিষ্ট্য, সুতরাং আপনার আর স্লোচিটাহা দরকার নেই। তবে অন্তর্নির্মিত রূপান্তরগুলি কেবলমাত্র আপনি অ্যাপ্লিকেশন প্রকাশ করলেই প্রয়োগ হবে, আপনি এটি চালিত না করে নয়। আমি কীভাবে এটি সমাধান করেছি তা আপনি এখানে দেখতে পারেন ।
ম্যাট

4
@ কমস্কির উত্তরটি একটি সহজ এবং পরিষ্কার সমাধান সরবরাহ করার সময় কেন এটি ব্যবহার করবেন তা নিশ্চিত নন।
সিএসবা তোথ

4
স্লোচিটা দুর্দান্ত, তবে তাদের নিজস্ব ডকুমেন্টেশন থেকে: "ওয়েব প্রকল্পের জন্য ফাইলগুলি আপনার অ্যাপ্লিকেশন প্রকাশ বা প্যাকেজ করার সময় রূপান্তরিত হয় are" অন্য কথায়, ডিবাগ করার সময় নয়।
ডগ

32

ভিজ্যুয়াল স্টুডিও (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


4
দেখে মনে হচ্ছে কোডপোজেক্ট পোস্টটি পোচড। তিনি তার কোডের নমুনাগুলির জন্য স্ক্রিনশট ব্যবহার করেছেন এবং এখন থেকে তার ব্লগটি নিচে চলে যাওয়ার পরে সেগুলি ইতিহাসের কাছে হারিয়ে গেছে।
এরিক লয়েড

4
হ্যাঁ, দুর্ভাগ্যক্রমে স্ক্রিনশটগুলি শেষ হয়ে গেছে। তবে কমপক্ষে নিবন্ধের পাঠ্যটি এখনও রয়েছে, পদ্ধতির বর্ণনা দিয়ে। এটি হারাতে এড়াতে আমি আমার উত্তরে পাঠ্য বিবরণ যুক্ত করেছি।
ম্যাট

4
সত্য, সম্ভবত কেউ কোডোপ্রজেক্টে লেখক জেমস কলম্যানের সাথে যোগাযোগের চেষ্টা করতে পারেন এটি ঠিক করার জন্য। যদিও তিনি এখনও সেখানে সক্রিয় রয়েছেন তা নিশ্চিত নয়। @ থমাসটিলমান
ম্যাট

আমি মনে করি এটি হারিয়ে যাওয়া স্ক্রিনশটগুলিতে যা ছিল তার অনুরূপ হতে পারে। একই বুনিয়াদি ফলাফল অর্জন বলে মনে হচ্ছে। stackoverflow.com/a/6437192/1003916
user1003916

22

আপনার প্রশ্নের উত্তর দেওয়া সহজ নয়, কারণ এটি একটি সমস্যা তৈরি করে - আপনি যদি Web.debug.config এর সাথে Web.config রূপান্তর করতে চান - যেখানে রূপান্তর প্রভাব সংরক্ষণ করা উচিত? নিজেই ওয়েবকনফিগে? এই রূপান্তর উত্স ফাইল ওভাররাইট হবে! সম্ভবত সে কারণেই ভিজ্যুয়াল স্টুডিও বিল্ডগুলির সময় রূপান্তরগুলি করে না।

পূর্ববর্তী ম্যাট উত্তরটি বৈধ, তবে আপনি জেনেরিক সমাধানের জন্য তাদের মিশ্রিত করতে চাইতে পারেন যা আপনি যখন সক্রিয় সমাধান কনফিগারেশনটি ডিবাগ থেকে ছেড়ে দেওয়ার ক্ষেত্রে পরিবর্তন করেন তখন এখানে একটি সহজ সমাধান রয়েছে:

  1. কনফিগারেশনের জন্য আপনার কনফিগার রূপান্তরগুলি তৈরি করুন (ডিবাগ, প্রকাশ, ইত্যাদি)
  2. পুনঃনামকরণ Web.configফাইল Web.base.config- রূপান্তরের automaticly (তদনুসারে নামান্তর উচিত Web.base.Debug.config, ইত্যাদি)
  3. আপনার প্রকল্প ফোল্ডারে নিম্নলিখিত ট্রান্সফর্ম ওয়েবেকনফিগ.প্রজ এক্সএমএল ফাইল যুক্ত করুন :
<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" DefaultTargets="TransformWebConfig" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="TransformWebConfig">
    <TransformXml Source="Web.base.config" Transform="Web.base.$(CurrentConfig).config" Destination="Web.config" />
  </Target>
</Project>
  1. আপনার প্রকল্পের বৈশিষ্ট্যে নেভিগেট করুন, ইভেন্টগুলি তৈরি করুন চয়ন করুন এবং পোস্ট-বিল্ড ইভেন্ট কমান্ড লাইনে নিম্নলিখিত সামগ্রী যুক্ত করুন :
@if exist "%ProgramFiles(x86)%\MSBuild\12.0\bin" set PATH=%ProgramFiles(x86)%\MSBuild\12.0\bin;%PATH%
msbuild $(ProjectDir)transformWebConfig.proj /t:TransformWebConfig /p:CurrentConfig=$(ConfigurationName) /p:TargetProjectName=$(TargetPath)

এখন, আপনি যখন নিজের সমাধানটি তৈরি করবেন, সক্রিয় কনফিগারেশনের জন্য বৈধ ট্রান্সফর্মেশন সহ একটি ওয়েবকনফিগ ফাইল তৈরি করা হবে।


সবচেয়ে পরিষ্কার এবং সেরা উত্তর। কিছু প্রশ্ন: ১. এক্সএমএল বৈধতা কেন ট্রান্সফর্মএক্সএমএল এলিমেন্ট লক্ষ্য উপাদানটির মধ্যে অবৈধ? (বিল্ডটি বিটিডব্লিউ কাজ করে)। ২. এখন এটি প্রকৃত ওয়েব.কনফিগ তৈরি করে, আমি এখনও প্রকল্পে ওয়েব.কনফিগ যুক্ত করি ig এখন যে কোনও সময় আমি ডিবাগ / রিলিজের মধ্যে স্যুইচ করব, ওয়েবকনফিগটি পরিবর্তিত হবে, তবে আমি অগত্যা সর্বদা উত্স রেপোতে প্রতিশ্রুতিবদ্ধ হতে চাই না।
সিএসবা তোথ

1. কীভাবে ভিএস স্কিমার সাহায্যে এই এক্সএমএলকে বৈধতা দেয় তা সত্যিই বলতে পারি না, তবে এই সতর্কতাটি সাধারণ, সুতরাং আপনি এটিকে উপেক্ষা করতে পারেন। ২. এটি রেপো আপনি কী ব্যবহার করছেন তার উপর নির্ভর করে তবে আপনি উদাহরণস্বরূপ git.ignore ফাইল এন্ট্রি ব্যবহার করতে পারেন।
কমস্কি

4
এটি আমার পক্ষে ভাল কাজ করেছে - কেবলমাত্র বিল্ড-ইভেন্টে 12 এর পরিবর্তন হয়েছে এবং প্রজ ফাইলটি বর্তমান সংস্করণে পরিণত হয়েছে। পোস্ট বিল্ড ঘটনা আমি ব্যবহৃত: '"$(MSBuildBinPath)\msbuild.exe" $(ProjectDir)TransformWebConfig.proj /t:TransformWebConfig /p:CurrentConfig=$(ConfigurationName) /p:TargetProjectName=$(TargetPath) এবং আপডেট v12.0করতে v14.0.proj ফাইলে।
জোভি

4
ভিএস 2017 এর জন্য প্রতিটিতে পরিবর্তন 12.0করুন14.0
সিএসবা তোথ

4
1) উত্সাহিত ওয়েবকনফিগটিকে ওয়েব প্রকল্পে অন্তর্ভুক্ত করতে ভুলবেন না বা প্রকাশিত হওয়ার পরে এটি ফোল্ডারটিকে লক্ষ্যবস্তু করতে অনুলিপি করবে না। 2) যদি বিল্ড সার্ভারে এই দুটি ফাইলের অভাব দেখা যায় তবে কেবল তাদের "মাইক্রোসফট.
ওয়েবে.পাবলিশিং.টাস্কস

8

ভিএস 2017 এর জন্য আমি উত্তরটি এখানে পেয়েছি তা নিশ্চিত নয় যে কেন কেউ উপরে এটি উল্লেখ করা হয়নি কারণ এটি খুব জনপ্রিয় সমাধান বলে মনে হচ্ছে। খুব সহজ। এটি ভিএস 2017 এবং সমস্ত সংস্করণে কাজ করার জন্য আপনি মার্চ 2019 তে আইওরল্যান্ডনি থেকে মন্তব্যটি দেখেছেন তা নিশ্চিত করুন।

মূলত এটি একটি দুই stepper। প্রথমে, আপনি নীচের কোডটি সংযোজন করে .csproj ফাইল সম্পাদনা করুন। দ্বিতীয়ত, আপনি একটি নতুন ওয়েব.বেস.কনফিগ কনফিগারেশন তৈরি করেন এবং বিদ্যমান ওয়েবকনফিগটিকে সেখানে অনুলিপি করেন। এটি করার পরে যে কোনও বিল্ড আপনার কাঙ্ক্ষিত রূপান্তরের সাথে আপনার ওয়েবকনফিগটিকে ওভাররাইট করে।

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="BeforeBuild">
    <TransformXml Source="Web.Base.config" 
        Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>  

এটি সম্ভবত সেরা উত্তর, তবে আইএমও এর একটি কৌশল মিস করছে। আপনি যদি তখন Web.configথেকে পরিবর্তন Contentহন Noneতবে আপনি ব্যবহার করতে পারেন Source="Web.config" Destination="$(TargetPath).config"(বা সম্ভবত কিছু ধরণের প্রকল্পের জন্য Destination="$(TargetDir)Web.config")। আমি রূপান্তরটি এও স্থানান্তরিত করেছি AfterBuild, যেহেতু ফাইলগুলি অনুলিপি করার আগে এটি আর করা দরকার নেই।
পিটার টেলর

ঠিক আছে, আসলে এটি কাজ করে না কারণ কোনও কারণে আমি এটিকে চালানোর জন্য কনফিগার করতে পারি না bin
পিটার টেলর

5

আপনার তাত্ক্ষণিক প্রশ্নের উত্তর দেওয়া হয়েছে - ব্যাখ্যাটি হ'ল ট্রান্সফর্মটি প্রকাশের জন্য প্রয়োগ করা হয়, বিল্ড নয়।

যাইহোক, আমি মনে করি যে এটি আপনি কী করতে চান তা কীভাবে অর্জন করতে হয় তার কোনও সমাধান প্রস্তাব করে না।

আমি এখন কয়েক দিন ধরে এই সঠিক সমস্যার সাথে লড়াই করছি, ওয়েবকনফিগটিকে পরিষ্কার রাখার উপায় খুঁজছি এবং সংশ্লিষ্ট রূপান্তর ফাইলগুলিতে পরিবেশের উপর নির্ভর করে সমস্ত কীগুলি সেট করে রাখছি। আমার উপসংহারটি হল যে সবচেয়ে সহজ এবং স্থিতিশীল সমাধান হ'ল মূল ওয়েবকনফিগে ডিবাগ মানগুলি ব্যবহার করা, আপনি ভিজুয়াল স্টুডিওতে ডিবাগ চালানোর সময় সেগুলি সর্বদা উপস্থিত থাকে।

তারপরে আপনি যে বিভিন্ন পরিবেশে প্রকাশ করতে চান তার জন্য রূপান্তর তৈরি করুন - পরীক্ষা, সংহতকরণ, উত্পাদন - আপনার যা কিছু আছে। প্রকাশের ওয়েবকনফিগ ফাইলগুলিতে রূপান্তর করার জন্য এখন অন্তর্নির্মিত কার্যকারিতা এর জন্য যথেষ্ট। স্লোচিথাহ বা বিল্ড ইভেন্টগুলি বা প্রকল্পের ফাইল সম্পাদনার দরকার নেই। আপনার যদি কেবল ওয়েব প্রকল্প থাকে তবে তা।

আপনি যদি চান, আপনার সমাধানে ওয়েব.দেবগ.কনফিগ ফাইল থাকতে পারে, কেবলমাত্র বিকাশের পরিবেশের সাথে সম্পর্কিত সমস্ত মান সহ একটি পৃথক ফাইল রাখতে। এতে মন্তব্য করতে ভুলবেন না যে ভিজ্যুয়াল স্টুডিওতে চলাকালীন মানগুলি প্রয়োগ করা হয় না, তবে অন্য কেউ যদি সেই উদ্দেশ্যে এটি ব্যবহার করার চেষ্টা করে!


1

অক্টোপাস ডিপ্লাই ব্যবহার করুন (সম্প্রদায় সংস্করণটি নিখরচায়) এবং এটি আপনার web.configজন্য রূপান্তর করতে দিন। পদক্ষেপ:

  1. আপনার ওয়েব অ্যাপ্লিকেশন মোতায়েনের জন্য অক্টোপাস সেট আপ করুন
  2. আপনার মূল ফাইলটি পছন্দ করার মতো আপনার সম্পত্তি সেট করা Web.Release.configআছে তা নিশ্চিত করুন।Build ActionContentweb.config

এটাই! অক্টোপাস বাকী কোন বিশেষ কনফিগার ছাড়াই করবে। ডিফল্ট আইআইএস ওয়েব সাইট স্থাপন করা বাক্সের বাইরে এটি করবে:এখানে চিত্র বর্ণনা লিখুন


সংখ্যা 2 চাবিকাঠি :)
রেজা

0

দৃশ্যত ভিজ্যুয়াল স্টুডিও 2015 এর জন্য একটি এক্সটেনশন রয়েছে

https://visualstudiogallery.msdn.microsoft.com/05bb50e3-c971-4613-9379-acae2cfe6f9e

এই প্যাকেজটি আপনাকে বিল্ড কনফিগারেশনের উপর ভিত্তি করে আপনার app.config বা অন্য কোনও এক্সএমএল ফাইলকে রূপান্তর করতে সক্ষম করে


স্লোচিটা কোনও নতুন নয়। এটা অনেক দিন ধরে আছে। তাদের 1.1 প্রকাশটি 9/8/2011
হাবো

@ হাইবো আপনার মনোযোগের জন্য আপনাকে ধন্যবাদ, আমি newবাক্য হিসাবে বিশ্বকে সরিয়েছি ।
আমির আস্তানাহ

0

নেট নেট ফ্রেমওয়ার্ক 2.0 এর ভিত্তিতে পুরানো ওয়েবকনফিগ ফাইলটি নিয়ে আমার একই সমস্যা হয়েছিল । সমাধানটি কেবল ওয়েবকনফাইগের নেমস্পেসটি মুছে ফেলা হয়েছিল ( কনফিগারেশন রুট নোডে এক্সএমএলএনস অ্যাটটিবুট ):

আগে: <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

পরে: <configuration>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.