App.Config রূপান্তর কী প্রকল্পগুলির জন্য যা ভিজ্যুয়াল স্টুডিওতে ওয়েব প্রকল্প নয়?


546

ভিজ্যুয়াল স্টুডিও 2010 ওয়েব ভিত্তিক অ্যাপ্লিকেশনের জন্য আমাদের কাছে কনফিগার ট্রান্সফর্মেশন বৈশিষ্ট্য রয়েছে যার দ্বারা আমরা বিভিন্ন পরিবেশের জন্য একাধিক কনফিগারেশন ফাইলগুলি বজায় রাখতে পারি। তবে একই বৈশিষ্ট্যটি উইন্ডোজ পরিষেবাদি / উইনফর্মস বা কনসোল অ্যাপ্লিকেশনগুলির জন্য অ্যাপ.কনফিগ ফাইলগুলির জন্য উপলভ্য নয়।

এখানে প্রস্তাবিত অনুসারে একটি কার্য্যসীমা রয়েছে : অ্যাপ.কনফিগে এক্সডিটি যাদুটি প্রয়োগ করা

তবে এটি সোজা নয় এবং এর জন্য বেশ কয়েকটি পদক্ষেপের প্রয়োজন। অ্যাপকনফাইগ ফাইলগুলির জন্য একই অর্জনের কি সহজ উপায় আছে?


আমি নীচের নিবন্ধটি জুড়ে এসেছি যা কিছুটা সহজ দেখাচ্ছে তবে আমি নিজে চেষ্টা করে দেখিনি। fknut.blogspot.com/2009/11/… এছাড়াও, এমএস কানেক্টে একটি বৈশিষ্ট্য অনুরোধ রয়েছে যা ভোটদানের পক্ষে মূল্যবান হতে পারে তাই এটি পরবর্তী এসপি বা সংস্করণে বোর্ড জুড়ে অন্তর্ভুক্ত হয়ে যায়। কানেক্ট.মাইক্রোসফট
কিম আর

উত্তর:


413

এই নিবন্ধটিতে চিকিত্সা করা ভিজ্যুয়াল স্টুডিও অ্যাডআইনের সাথে এটি এখন কাজ করে: স্লোচিটাঃ ওয়েবকনফিগ ট্রান্সফর্মেশন সিনট্যাক্স এখন কোনও এক্সএমএল কনফিগারেশন ফাইলের জন্য সাধারণীকরণ হয়েছে

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

আপনি মনে করতে পারেন যে আপনি একটি ওয়েবকনফিগকে রূপান্তর করতে এক্সএসএলটি ব্যবহার করতে চান, তবে তারা স্বজ্ঞাতভাবে সঠিক অনুভব করার সময় এটি আসলে খুব ভার্বোস।

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

<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()">
  <xsl:copy>           
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>
<xsl:template match="/configuration/appSettings">
  <xsl:copy>
    <xsl:apply-templates select="node()|@*"/>
    <xsl:element name="add">
      <xsl:attribute name="key">NewSetting</xsl:attribute>
      <xsl:attribute name="value">New Setting Value</xsl:attribute>
    </xsl:element>
  </xsl:copy>
</xsl:template>
</xsl:stylesheet>

বা মোতায়েন রূপান্তর মাধ্যমে একই জিনিস:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
   <appSettings>
      <add name="NewSetting" value="New Setting Value" xdt:Transform="Insert"/>
   </appSettings>
</configuration>

ওহ যে মিষ্টি! অসংখ্য কনফিগার ফাইল (লগ 4 নেট, এনহাইবারনেট, ওয়েবকনফিগ) সহ একটি অ্যাপ্লিকেশন পান এবং সেগুলি পরিবর্তন করতে মনে রাখা কিছুটা ব্যথা হয়েছিল। আমি কোডটি ক্রুজকন্ট্রোল.নাইটে স্থানান্তরিত করার অপেক্ষায় ছিলাম না তবে মনে হচ্ছে এটি খুব বাতাসের মতো।
DilbertDave

10
এফওয়াইআই, স্লোচিটা একটি দুর্দান্ত এক্সটেনশন ছিল যা এখন ভিএস ২০১৪-এর পরে অসমর্থিত হবে the লেখক হিসাবে, সায়েদ ইব্রাহিম হাশমি , sedodream.com/2014/08/11/…
বিডিম

5
@ অ্যান্ড্রুব, আমি এখানে পড়েছি ; তবে, এটি এক বছর আগে ছিল। থ্রেডটি পুনর্বিবেচনা করার পরে এবং মন্তব্যগুলি পড়ার পরে দেখে মনে হচ্ছে কেউ এখানে ভিএস2015 এর সাথে কাজ করে এমন একটি সংস্করণ সরবরাহ করেছে ।
অনিল নাথ

2
ভিজ্যুয়াল স্টুডিও 2017 এবং ভিজ্যুয়াল স্টুডিও 2019 এর সাথে নিখুঁতভাবে কাজ করা
দে

1
এটি এখন এখানে
হুগো

573

আমি বেশ কয়েকটি সমাধান চেষ্টা করেছিলাম এবং এখানে ব্যক্তিগতভাবে আমি খুঁজে পাওয়া সবচেয়ে সহজ।
ড্যান মন্তব্য উল্লেখ করেছিলেন যে, আসল পোস্ট জন্যে ওলেগ Sych - ধন্যবাদ, ওলেগ!

এখানে নির্দেশাবলী:

1. প্রকল্পে প্রতিটি কনফিগারেশনের জন্য একটি এক্সএমএল ফাইল যুক্ত করুন।

সাধারণত আপনি হবে Debugএবং Releaseকনফিগারেশনের তাই আপনার ফাইল নাম App.Debug.configএবং App.Release.config। আমার প্রকল্পে, আমি প্রতিটি ধরণের পরিবেশের জন্য একটি কনফিগারেশন তৈরি করেছি, যাতে আপনি এটি ব্যবহার করতে চাইতে পারেন।

2. প্রকল্পটি আনলোড করুন এবং সম্পাদনার জন্য .csproj ফাইলটি খুলুন

ভিজ্যুয়াল স্টুডিও আপনাকে সম্পাদকের ডানদিকে .csproj ফাইল সম্পাদনা করার অনুমতি দেয় — আপনাকে প্রথমে প্রকল্পটি আনলোড করা দরকার। তারপরে এটিতে ডান ক্লিক করুন এবং সম্পাদনা <প্রজেক্টনাম> .csproj নির্বাচন করুন

3. অ্যাপ্লিকেশনটি আবদ্ধ করুন। * প্রধান অ্যাপ্লিকেশন কনফিগ ফাইল কনফিগার করুন

প্রজেক্ট ফাইল বিভাগটি সন্ধান করুন যাতে সমস্ত App.configএবং App.*.configরেফারেন্স রয়েছে । আপনি লক্ষ্য করবেন যে তাদের বিল্ড ক্রিয়াগুলি এতে সেট করা রয়েছে None:

<None Include="App.config" />
<None Include="App.Debug.config" />
<None Include="App.Release.config" />

প্রথমে তাদের সবার জন্য বিল্ড অ্যাকশন সেট করুন Content
এরপরে, সমস্ত কনফিগারেশন-নির্দিষ্ট ফাইলগুলি মূলের উপর নির্ভরশীল করে তুলুন App.configযাতে ভিজ্যুয়াল স্টুডিওগুলি সেগুলি যেমন ডিজাইনার এবং কোড-পেছনের ফাইলগুলি পছন্দ করে তাদের গোষ্ঠী করে।

উপরের এক্সএমএলকে নীচের সাথে পরিবর্তন করুন:

<Content Include="App.config" />
<Content Include="App.Debug.config" >
  <DependentUpon>App.config</DependentUpon>
</Content>
<Content Include="App.Release.config" >
  <DependentUpon>App.config</DependentUpon>
</Content>

৪. রূপান্তর যাদুটি সক্রিয় করুন (শুধুমাত্র ভিসুয়াল স্টুডিওর পূর্ববর্তী ভিএস ২০১7 এর জন্য প্রয়োজনীয় )

ফাইলের শেষে

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

এবং ফাইনালের আগে

</Project>

নিম্নলিখিত XML প্রবেশ করান:

  <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="CoreCompile" Condition="exists('app.$(Configuration).config')">
    <!-- Generate transformed app config in the intermediate directory -->
    <TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />
    <!-- Force build process to use the transformed configuration file from now on. -->
    <ItemGroup>
      <AppConfigWithTargetPath Remove="app.config" />
      <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
        <TargetPath>$(TargetFileName).config</TargetPath>
      </AppConfigWithTargetPath>
    </ItemGroup>
  </Target>

এখন আপনি প্রকল্পটি পুনরায় লোড করতে পারেন, এটি তৈরি করতে এবং App.configরূপান্তর উপভোগ করতে পারেন !

অবগতির জন্য

আপনার App.*.configফাইলগুলির ঠিক মতো সেটআপ রয়েছে তা নিশ্চিত করুন :

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
     <!--magic transformations here-->
</configuration>

4
এই জন্য একটি টন ধন্যবাদ! একটি নোট, আপনি সিএসপি্রোজ সম্পাদনা করার পরে যদি প্রকল্পে নতুন। কনফিগ ফাইলগুলি যুক্ত করেন তবে এগুলি অ্যাপকনফাইগের অধীনে গোষ্ঠীযুক্ত দেখানো হবে। আমি সিএসপ্রোজ সম্পাদনা করার আগে একটি যুক্ত করেছি এবং এটির দুটি লিঙ্কের সাথে মূলত শেষ হয়েছিল, একটি দলবদ্ধ এবং একটি একক।
জেফ সোয়েনসেন

8
এই পদ্ধতির সাথে একটি সমস্যা হ'ল আপনি যখন প্রকল্পের বৈশিষ্ট্যগুলিতে "প্রকাশ করুন" ট্যাবটি দেখেন এবং তারপরে "অ্যাপ্লিকেশন ফাইলগুলি" বোতামটি ক্লিক করেন ... আপনি দেখতে পাবেন যে অ্যাপ্লিকেশন কনফিগ, অ্যাপ্লিকেশন। ডেগুগকনফিগ, অ্যাপ্লিকেশন.রিলেজ.কনফিগ প্রকাশের প্রক্রিয়ার অংশ হিসাবে মোতায়েন করতে বাধ্য করা হয়েছে। অবশ্যই, আপনিও সঠিক MyApp.exe.config ফাইল পেয়েছেন, তবে আমি অতিরিক্ত ব্যাগ লাগানো চাই না। অ্যাপ্লিকেশনটি রাখার একটি উপায় থাকা দরকার *
লি গ্রিসম

6
এটি যে সমস্যার জন্য কারও কারও কাছে ছাড়ছে তা হ'ল উত্তরটি মূলত ওলেগ সাইচ থেকে নেওয়া উত্তরটি একটি মূল টুকরো ছেড়ে দেয়। আপনার ব্যক্তিগত অ্যাপ্লিকেশানে থাকেন (env) .configs তুমি কি তালিকা '<কনফিগারেশন xmlns: xdt = "না। Schemas.microsoft.com/XML-Document-Transform ">' এবং ভালো কিছু <appSettings xdt: ট্রান্সফর্ম = "প্রতিস্থাপন"> বা বৈশিষ্ট্যগুলি যা সেটিং লাইনে একই জিনিস করে, এটি কার্যকর হবে না। এই শেষ বিট তথ্যটি কী এবং আমি এটি যুক্ত করার পরে, এটি সমস্ত কাজ করা শুরু করে।
djangojazz

24
আপনি প্রতিস্থাপন করতে পারে v10.0সঙ্গে v$(VisualStudioVersion)নিশ্চিত আপনার প্রকল্পের বনাম সব পরে সংস্করণের সাথে কাজ করে করতে
থিবল্ট ডি

14
আমার একটি ত্রুটি হয়েছিল এমএসবিল্ড ত্রুটি এমএসবি 3021: ফাইলটি অনুলিপি করতে অক্ষম। বিল্ড চলাকালীন 'আপত্তি \ প্রকাশ \ কনসোল অ্যাপ.এক্সই' ফাইলটি খুঁজে পাওয়া যায়নি। সুতরাং আমি সমাধানটিতে একটি নতুন মত তৈরির পরিবর্তে লক্ষ্য <টার্গেটের নাম = "আফটার বিল্ড"> বিভাগটি পুনরায় ব্যবহার করার জন্য কিছুটা সমাধান পরিবর্তন করেছি
এসিডিস

137

আমি খুঁজে পেয়েছি এমন আরও একটি সমাধান হ'ল রূপান্তরগুলি ব্যবহার করা নয় তবে কেবল একটি পৃথক কনফিগারেশন ফাইল রয়েছে, যেমন অ্যাপ্লিকেশন eরিলেজকনফিগ। তারপরে আপনার সিএসপোজ ফাইলটিতে এই লাইনটি যুক্ত করুন।

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
    <AppConfig>App.Release.config</AppConfig>
  </PropertyGroup>

এটি কেবলমাত্র myprogram.exe.config ফাইল উত্পন্ন করবে না তবে আপনি যদি এমএসআই উত্পন্ন করতে ভিজ্যুয়াল স্টুডিওতে সেটআপ এবং ডিপ্লোয়মেন্ট প্রকল্প ব্যবহার করেন তবে প্যাকেজিংয়ের সময় এটি স্থাপনার প্রকল্পটিকে সঠিক কনফিগারেশন ফাইলটি ব্যবহার করতে বাধ্য করবে।


6
এমএসবিল্ডের অজানা আশ্চর্য। এখন ভাবছি আর কী কী সম্ভব? BTW। এটি সরাসরি ভিএস থেকে ক্লিকঅনস মোতায়েনের জন্যও কাজ করে (উচ্চ-ভোটযুক্ত উত্তরের বিপরীতে)।
বরিস বি।

4
যদি কনফিগারেশনে এমন অনেকগুলি এন্ট্রি থাকে যা সমস্ত বিল্ডের জন্য একই। এখনই একটি সমস্যা নিয়ে কাজ করা যেখানে একটি পরিবেশের .কনফিগ একটি পরিবর্তন মিস করে, এবং অবশ্যই এটি উত্পাদন ছিল।
জিপওয়রণ

1
কনফিগ ফাইলের দুটি অনুলিপি থাকা কোনও সমস্যা নয়, যতক্ষণ না বিকাশকারীরা ম্যানুয়ালি এটি রক্ষণাবেক্ষণ করে না।
anIBMer

1
এটি সুন্দর, কবজির মতো কাজ করে! আমি কনফিগারেশনের জন্য <AppConfig>App.Release.config</AppConfig>বিদ্যমান <PropertyGroupঅবস্থার ভিতরে কেবল রেখাটি Releaseআটকালাম এবং আইডিই স্কাইমা <AppConfig>বা কোনও কিছুর মধ্যে নেই বলে ... লাইনটির নীচে একটি অদ্ভুত লাইন দেখিয়েছে , তবে আমি যাইহোক ফাইলটি সংরক্ষণ করেছি এবং প্রকল্পের ফাইলটি পুনরায় লোড করেছি এবং একটি বিল্ডিং করেছি মধ্যে Releaseকনফিগ এবং এটা কাজ!
শিব

1
এটির সাহায্যে আপনি সেটিংস ডিজাইনারের কার্যকারিতা হারাবেন।
ওন্দেজ

33

আমার অভিজ্ঞতায়, পরিবেশ-নির্দিষ্ট করার জন্য যে জিনিসগুলি আমার প্রয়োজন তা হ'ল জিনিসগুলি যেমন সংযোগের স্ট্রিং, অ্যাপসেটিংস এবং প্রায়শই স্ট্যাম্প সেটিংস। কনফিগারেশন সিস্টেম পৃথক ফাইলে এই জিনিসগুলি নির্দিষ্ট করতে দেয়। সুতরাং আপনি এটিকে আপনার app.config / web.config এ ব্যবহার করতে পারেন:

 <appSettings configSource="appsettings.config" />
 <connectionStrings configSource="connection.config" />
 <system.net>
    <mailSettings>
       <smtp configSource="smtp.config"/>
    </mailSettings>
 </system.net>

আমি সাধারণত যা করি তা হ'ল এই কনফিগারেশন-নির্দিষ্ট বিভাগগুলি আলাদা ফাইলগুলিতে কনফিগার ফাইল (একটি সমাধানের মূল অথবা প্রকল্পের স্তরে নির্ভর করে) বলা হয় f আমি কনফিগারেশন প্রতি একটি ফাইল সংজ্ঞায়িত করি, যেমন: smtp.config.Debug এবং smtp.config.Re দয়া করে।

তারপরে আপনি প্রাক-বিল্ড ইভেন্টটি এর মতো সংজ্ঞায়িত করতে পারেন:

copy $(ProjectDir)ConfigFiles\smtp.config.$(ConfigurationName) $(TargetDir)smtp.config

টিম বিকাশে, আপনি% COMPUTERNAME% এবং / অথবা% USERNAME% কে কনভেনশনে অন্তর্ভুক্ত করে আরও এই টুইট করতে পারেন।

অবশ্যই এটি বোঝায় যে টার্গেট ফাইলগুলি (x.config) উত্স নিয়ন্ত্রণে রাখা উচিত নয় (যেহেতু তারা উত্পন্ন হয়)। আপনার এখনও তাদের প্রকল্প প্রকল্পে যুক্ত করা উচিত এবং তাদের আউটপুট ধরণের সম্পত্তিটিকে 'সর্বদা অনুলিপি করুন' বা 'আরও নতুন যদি অনুলিপি করুন' তে সেট করা উচিত।

সহজ, এক্সটেনসিবল এবং এটি সমস্ত ধরণের ভিজ্যুয়াল স্টুডিও প্রকল্পগুলির জন্য কাজ করে (কনসোল, উইনফর্মস, ডাব্লুপিএফ, ওয়েব)।


আপনার ঠিক একই কনফিগারেশন আমার আছে। তবে এসএমটিপি ফাইলটি রূপান্তর করতে আমার সমস্যা আছে। আপনি কি মূল এবং ট্রান্সফর্মেশনকে অন্তর্ভুক্ত করতে পারেন? এগুলি আমার: বেস ফাইল: <?xml version="1.0"?> <smtp deliveryMethod="SpecifiedPickupDirectory"> <specifiedPickupDirectory pickupDirectoryLocation="C:\mail"/> <network host="localhost"/> </smtp> রূপান্তর:<?xml version="1.0"?> <smtp xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xdt:Transform="Replace" from="user@email.com" deliveryMethod="Network"> <network .../> </smtp>
জাগারজা

আমি নিশ্চিত নই যে আমি বুঝেছি. এই কনফিগারেশনে আমি কোনও রূপান্তর করি না, এটি কেবল ফাইলগুলি অনুলিপি করছে ...
jeroenh

ওহ, আমি কপির অংশটি দেখিনি। আমি কনফিগারটি কেবল অনুলিপি করার পরিবর্তে রূপান্তর করি। যাই হোক ধন্যবাদ.
জাগারজা

আমি এই সমাধানটি পছন্দ করি। একটি ছোট পরামর্শ: উত্সের উপরে অনুলিপিটিতে এবং অনুলিপিটির জন্য লক্ষ্যযুক্ত যুক্তিগুলি উদ্ধৃতি দ্বারা ঘিরে থাকা উচিত; অন্যথায় প্রাক বিল্ড তাদের নামটি দিয়ে স্থান সঙ্গে ডিরেক্টরি জন্য ব্যর্থ হবে
vandre

32

এই প্রশ্নে ওলেগ এবং অন্যদের দ্বারা অনুপ্রাণিত হয়ে , নিম্নলিখিতগুলি সক্ষম করতে আমি https://stackoverflow.com/a/5109530/2286801 সমাধানটি গ্রহণ করেছি ।

  • ক্লিকঅনস নিয়ে কাজ করে
  • ভিএস ২০১০-তে সেটআপ এবং স্থাপনার প্রকল্পগুলির সাথে কাজ করে
  • VS2010, 2013, 2015 নিয়ে কাজ করে (2012 এর পরীক্ষাও করেনি যদিও এটি কাজ করা উচিত)।
  • টিম বিল্ডের সাথে কাজ করে। (আপনাকে অবশ্যই এ) ইনস্টল করতে হবে) ভিজ্যুয়াল স্টুডিও বা বি) মাইক্রোসফ্ট.ওয়েব.পাবলিশিং.টারজেটস এবং মাইক্রোসফ্ট. ওয়েব.পাবলিশিং.টাস্কস.ডিএল)

এই সমাধানটি এমএসবিল্ড প্রক্রিয়াটিতে প্রথমবারের মতো অ্যাপ্লিকেশন কনফিগ রেফারেন্স হওয়ার আগে app.config রূপান্তর সম্পাদন করে কাজ করে। এটি একাধিক প্রকল্পে সহজে পরিচালনার জন্য একটি বাহ্যিক লক্ষ্যগুলি ফাইল ব্যবহার করে।

নির্দেশাবলী:

অন্যান্য সমাধানের অনুরূপ পদক্ষেপ। যা উদ্ধৃত হয়েছে তা উদ্ধৃত করেছি এবং এটি সম্পূর্ণতা এবং সহজ তুলনার জন্য অন্তর্ভুক্ত করেছি।

০. আপনার প্রকল্পে অ্যাপকনফাইগ ট্রান্সফরমেশন.টারাজেটস নামে একটি নতুন ফাইল যুক্ত করুন

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- Transform the app config per project configuration.-->
  <PropertyGroup>
    <!-- This ensures compatibility across multiple versions of Visual Studio when using a solution file.
         However, when using MSBuild directly you may need to override this property to 11.0 or 12.0 
         accordingly as part of the MSBuild script, ie /p:VisualStudioVersion=11.0;
         See http://blogs.msdn.com/b/webdev/archive/2012/08/22/visual-studio-project-compatability-and-visualstudioversion.aspx -->
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  </PropertyGroup>

  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.targets" />

  <Target Name="SetTransformAppConfigDestination" BeforeTargets="PrepareForBuild" 
          Condition="exists('app.$(Configuration).config')">
    <PropertyGroup>
      <!-- Force build process to use the transformed configuration file from now on. -->
      <AppConfig>$(IntermediateOutputPath)$(TargetFileName).config</AppConfig>
    </PropertyGroup>
    <Message Text="AppConfig transformation destination: = $(AppConfig)" />
  </Target>

  <!-- Transform the app.config after the prepare for build completes. -->
  <Target Name="TransformAppConfig" AfterTargets="PrepareForBuild" Condition="exists('app.$(Configuration).config')">
    <!-- Generate transformed app config in the intermediate directory -->
    <TransformXml Source="app.config" Destination="$(AppConfig)" Transform="app.$(Configuration).config" />
  </Target>

</Project>

1. প্রকল্পে প্রতিটি কনফিগারেশনের জন্য একটি এক্সএমএল ফাইল যুক্ত করুন।

সাধারণত আপনার ডিবাগ এবং রিলিজ কনফিগারেশন থাকবে তাই আপনার ফাইলগুলির নাম রাখুন App.Debug.config এবং App.Release.config। আমার প্রকল্পে, আমি প্রতিটি ধরণের এনিরনমেন্টের জন্য একটি কনফিগারেশন তৈরি করেছি যাতে আপনি এটির সাথে পরীক্ষা করতে পারেন।

2. প্রকল্পটি আনলোড করুন এবং সম্পাদনার জন্য .csproj ফাইলটি খুলুন

ভিজ্যুয়াল স্টুডিও আপনাকে সম্পাদনাতে সরাসরি .csproj সম্পাদনা করার অনুমতি দেয়। আপনাকে প্রথমে প্রকল্পটি আনলোড করা দরকার। তারপরে এটিতে ডান ক্লিক করুন এবং সম্পাদনা .csproj নির্বাচন করুন।

3. অ্যাপ্লিকেশনটি আবদ্ধ করুন। * প্রধান অ্যাপ্লিকেশন কনফিগ ফাইল কনফিগার করুন

প্রোজেক্ট ফাইল বিভাগটি সন্ধান করুন যাতে সমস্ত App.config এবং অ্যাপ্লিকেশন রয়েছে * আপনি লক্ষ্য করবেন যে আমরা সামগ্রীর পরিবর্তে কোনওটিই ব্যবহার করি না।

<ItemGroup>
  <None Include="app.config"/>
  <None Include="app.Production.config">
    <DependentUpon>app.config</DependentUpon>
  </None>
  <None Include="app.QA.config">
    <DependentUpon>app.config</DependentUpon>
  </None>
  <None Include="app.Development.config">
    <DependentUpon>app.config</DependentUpon>
  </None>
</ItemGroup>

৪. রূপান্তর যাদুটি সক্রিয় করুন

ফাইলের শেষে

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

এবং ফাইনালের আগে

</Project>

নিম্নলিখিত XML প্রবেশ করান:

<Import Project="AppConfigTransformation.targets" />

সম্পন্ন!


1
ভিএস সম্প্রদায় 2015 আরসি-তে চেষ্টা করা হয়েছে এবং এটি অ্যাপ্লিকেশনটিকে উপেক্ষা করে I
খাইনেস্তর

আমি একটি উইনফোর্ডস প্রকল্পে স্বীকৃত উত্তরটি সফলভাবে ব্যবহার করেছি .. তবে কিছু বিস্ময়কর কারণে গ্রহণযোগ্য উত্তরগুলি প্রয়োগ করতে পারেনি। অন্য উইনফর্মস প্রকল্পে (সমস্ত একই সমাধানে)। @ বিডিমের এই উত্তরটি আমার নতুন উন্মাদনা - যেহেতু এটি আমার এমএসআই প্রকল্পের সাথে সঠিকভাবে হস্তক্ষেপ করেছে - বড় ধন্যবাদ!
bkwdesign

এটি ভিএস 2015 তে কাজ করবে বলে মনে হচ্ছে না I আমি 10 থেকে 12 এ ভিজ্যুয়াল স্টুডিওভিশনটি আপডেট করেছি তবে কোনও ডাইস নেই। কোন ধারনা?
সিনায়েস্টিক

@ সিনাথেস্টিক আপনি কি আমাদের আরও বিশদ দিতে পারেন? ভিএস 2015 চূড়ান্ত, সম্প্রদায় ইত্যাদি। ভিবি.এনইটি, সি #, কোনও ত্রুটি?
বিডিমে

ভিএস2015 এন্টারপ্রাইজ। যাইহোক কোনও ত্রুটি নেই। এটি কিছু করে না।
সিনায়েস্টিক

27

আপনি কনফিগারেশন প্রতি পৃথক কনফিগারেশন ফাইল ব্যবহার করতে পারেন, যেমন অ্যাপ্লিকেশন D ডেগুগকনফিগ, অ্যাপ্লিকেশন eরিলেস.কনফিগ এবং তারপরে আপনার প্রকল্পের ফাইলে কনফিগারেশন ভেরিয়েবলটি ব্যবহার করুন:

<PropertyGroup>
    <AppConfig>App.$(Configuration).config</AppConfig>
</PropertyGroup>

এরপরে আপনি যে কনফিগারেশনটি তৈরি করছেন তার উপর নির্ভর করে সঠিক প্রকল্পনেম.এক্সে.কনফিগ ফাইল তৈরি করবে।


ধন্যবাদ, আমি যে সমস্যাটি করছিলাম সেগুলি সমাধান করার জন্য আমি আপনার সঠিক উদাহরণটি ব্যবহার করি নি তবে আপনার উদাহরণটি আমাকে ভাবতে বাধ্য করেছে এবং অনুলিপি টাস্কটি ব্যবহার করে আমাকে অন্যরকম অনুরূপ আত্মঘাতীতায় নিয়ে গেছে।
jpierson

ভিএস 2015 সম্প্রদায় আরসির অধীনে এটি চেষ্টা করে এটি তৈরি করে তবে অ্যাপ্লিকেশনটির সামগ্রীটিকে উপেক্ষা করে * *। কনফিগারেশন আমি যুক্ত করেছি।
খাইনেস্টার

14

ওয়েব অ্যাপ্লিকেশন প্রকল্পের কনফিগারেশন ট্রান্সফর্মের মতো বিল্ট করা মত অ্যাপ্লিকেশন কনফিগ রূপান্তরটি স্বয়ংক্রিয় করতে আমি ভাল এক্সটেনশন লিখেছিলাম wrote

এই এক্সটেনশনের সবচেয়ে বড় সুবিধাটি হ'ল আপনাকে সমস্ত বিল্ড মেশিনে এটি ইনস্টল করার দরকার নেই


1
খুব কার্যকর প্রসার, বিশেষত এখন ধীর চিতা রক্ষণাবেক্ষণ মোডে প্রবেশ করছে এবং ভবিষ্যতে এটি সমর্থনযোগ্য নয়।
dthrasher

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

5

মার্কেটপ্লেস থেকে ভিজ্যুয়াল স্টুডিওতে "কনফিগারেশন ট্রান্সফর্ম সরঞ্জাম" ইনস্টল করুন এবং ভিএস পুনরায় চালু করুন আপনি app.config এর জন্য মেন্যু পূর্বরূপ রূপান্তরও দেখতে সক্ষম হবেন।

https://marketplace.visualstudio.com/items?itemName=GolanAvraham.ConfigurationTransform


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

1
দৃশ্যের পিছনে সমাধানের জন্য আপনাকে অনেক ধন্যবাদ, ড্যান আব্রামভ আপনার হাতটি নোংরামি না করে উপরে যা বলেছিলেন তা ঠিক তাই করে
মোহাম্মদ দাউদ আনসারী

এটিই চূড়ান্ত সমাধান। পূর্বরূপটি ভিএস 2019 এর সাথে ঠিকঠাকভাবে কাজ করবে বলে মনে হচ্ছে
কাইল চ্যাম্পিয়ন

1
আমি এটি পছন্দ করি, তবে এটি সিএসপিওজের কোনও সম্পাদনা ছাড়াই অন্যান্য নন অ্যাপ-কনফিগ ফাইলগুলিকে সমর্থন করে না found যদিও পূর্বরূপ দেখতে এখনও দুর্দান্ত।
Ian1971

4

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

  <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="BeforeBuild" Condition="exists('app.$(Configuration).config')">
    <TransformXml Source="App.Base.config" Transform="App.$(Configuration).config" Destination="App.config" />
  </Target>

3

সমাধানের সামান্য উন্নতি যা এখন সর্বত্র পোস্ট করা হয়েছে বলে মনে হচ্ছে:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
  • এটি হ'ল যদি না আপনি চিরকালের জন্য আপনার বর্তমান ভিএস সংস্করণের সাথে থাকার পরিকল্পনা করছেন

আপনি দয়া করে একটু উত্তর দিতে পারেন বা এটি ব্যাখ্যা করার জন্য উত্স দিতে পারেন?
রোয়ডুকি

4
মনে হচ্ছে না $(VisualStudioVersion)যখন MSBuild সরাসরি ব্যবহার সেট করা হয়।
জেরেমি স্মিথ

এটি স্ট্যাকওভারফ্লো.com/ a/ 5109530 / 2003763 (আমি কেবল সেখানে মন্তব্য হিসাবে একই তথ্য যুক্ত করেছি)
থিবল্ট ডি

2

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

সমাধানটিতে একটি একক এমএসবিল্ড প্রকল্প থাকে যা একবার বিদ্যমান উইন্ডোজ অ্যাপ্লিকেশন প্রকল্পে (* .csproj) আমদানি করে বিল্ড প্রক্রিয়াটিকে অ্যাপ.config রূপান্তর বিবেচনা করতে প্রসারিত করে।

আপনি ভিজ্যুয়াল স্টুডিও App.config এক্সএমএল ট্রান্সফরমেশন এ আরও বিস্তারিত ব্যাখ্যা পড়তে পারেন এবং এমএসবাইল্ড প্রকল্প ফাইলটি গিটহাব থেকে ডাউনলোড করা যায়


1

আপনি যদি কোনও টিএফএস অনলাইন (ক্লাউড সংস্করণ) ব্যবহার করেন এবং আপনি কোনও প্রকল্পে অ্যাপ.কনফিগ রূপান্তর করতে চান, তবে কোনও অতিরিক্ত সরঞ্জাম ইনস্টল না করে আপনি নিম্নলিখিতটি করতে পারেন। ভিএস => থেকে প্রকল্পটি আনলোড করুন => প্রকল্পের ফাইল সম্পাদনা করুন => ফাইলের নীচে যান এবং নিম্নলিখিতগুলি যুক্ত করুন:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterBuild" Condition="Exists('App.$(Configuration).config')">
<TransformXml Source="App.config" Transform="App.$(Configuration).config" Destination="$(OutDir)\$(AssemblyName).dll.config" />

অ্যাসেম্বলি ফাইল এবং গন্তব্য স্থানীয় ব্যবহার এবং টিএফএস অনলাইন (ক্লাউড) সার্ভারের জন্য কাজ করে।


0

যখন কনফিগারেশন ফাইল সহ কোনও শ্রেণি গ্রন্থাগার অন্য প্রকল্প থেকে রেফারেন্স করা হয় তখন প্রস্তাবিত সমাধান কাজ করবে না (আমার ক্ষেত্রে এটি অ্যাজুরে কর্মী প্রকল্প গ্রন্থাগার ছিল)। এটি objফোল্ডার থেকে ফোল্ডারে সঠিক রূপান্তরিত ফাইলটি অনুলিপি করবে না bin\##configuration-name##। এটি সর্বনিম্ন পরিবর্তনগুলির সাথে কাজ করার জন্য আপনাকে AfterCompileলক্ষ্যটি পরিবর্তন করতে হবে BeforeCompile:

<Target Name="BeforeCompile" Condition="exists('app.$(Configuration).config')">
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.